[英]Getting wrong month when using SimpleDateFormat.parse
在我的程序中有一個非常奇怪的問題。 在這里你可以看到String birthday
和Log
來檢查它:
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
。
我想提供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.