簡體   English   中英

使用SimpleDateFormat.parse時錯誤的月份

[英]Getting wrong month when using SimpleDateFormat.parse

在我的程序中有一個非常奇怪的問題。 在這里你可以看到String birthdayLog來檢查它:

birthday = String.valueOf(birthYear) + "-" + String.valueOf(birthMonth) + "-" + String.valueOf(birthDay);
Log.i(TAG, "Birthday: " + birthday)

然后我把它放到SimpleDateFormat並用Log檢查它:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");

Date birthDate = sdf.parse(birthday);
Log.i(TAG, "Birth date  : " + birthDate);

然后在Logcat我有:

I/App﹕ Birthday: 1999-10-15
I/App﹕ Birth date: Fri Jan 15 00:10:00 GMT+04:00 1999

所以你在日期看到它是Jan ,但是在String中它是10所以date應該是這樣的:

Fri Nov 15 00:10:00 GMT+04:00 1999

我的錯誤在哪里?

PS我認為我的問題與使用SimpleDateFormat.parse()時獲取錯誤數據有某種聯系

采用:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

使用MM表示月份mm表示分鍾,文檔所述 ...

如果要以特定格式打印Date ,則應使用:

 sdf.format(birthday)

或者另一個SimpleDateFormat如果你想以不同的格式pring它...

我遇到了同樣的問題,現在我發現了錯誤。 我們應該使用MM表示月份, mm表示分鍾, dd表示日期。 使用DD將我的日期更改為錯誤的月份,因此我使用dd作為日期,因此我使用的最終格式是yyyy-MM-dd

ThreeTenABP

我想提供2017年答案。 對於Android,首先獲得ThreeTenABP庫。 說明在這個問題:如何在Android項目中使用ThreeTenABP 然后剩下的就像:

    LocalDate birthDate = LocalDate.of(birthYear, birthMonth, birthDay);
    System.out.println("Birth date  : " + birthDate);

這打印:

Birth date  : 1999-10-15

如果您將月份,月份和日期作為數字,則無需進行任何解析,這只會使事情復雜化。

ThreeTenABP是java.time或JSR-310的java.time ,現代Java日期和時間API,是Android Java 7.如果您使用的是Java 8或更高版本,則java.time是內置的。 (非Android)Java 6和7還有一個后端口ThreeTen Backport

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM