使用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
所以日期应该是这样的:
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它…
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 。
我遇到了同样的问题,现在我发现了错误。 我们应该使用MM
表示月份, mm
表示分钟, dd
表示日期。 使用DD
将我的日期更改为错误的月份,因此我将dd
用于白天,因此我使用的最终格式是yyyy-MM-dd
。