Java 解析日期字符串 returns 错误的月份
Java parse date string returns wrong month
我尝试解析一个日期字符串,但得到了错误的月份,为什么?
new SimpleDateFormat("yyyy-MM-DD", Locale.US).parse("2018-03-08")
为什么这个 returns 月是一月?
请查看截图:
您需要使用 dd
而不是 DD
试试这个:-
new SimpleDateFormat("yyyy-MM-dd", Locale.US).parse("2018-03-08");
看看这个 tutorial 如果您要显示月份名称,您应该使用 3 M,这不是 d
而不是 D
的日期标准
我建议尝试 yyyy-MMM-dd
我在下面尝试了这个,通过将 DD
更改为 dd
它工作正常
try {
Date date= new SimpleDateFormat("yyyy-MM-dd",Locale.US).parse("2018-03-08");
Calendar calendar= Calendar.getInstance();
calendar.setTime(date);
Log.d("MONTH ","" + calendar.get(Calendar.MONTH));
} catch (ParseException e) {
e.printStackTrace();
}
这是由于您使用的格式 "yyyy-MM-DD"
。解析器将按顺序解析:
- 您输入的值为
"2018-03-08"
yyyy
- 将带来 2018 年
MM
- 将进入 MARCH 月份
但是DD
是什么?它是从年初算起的天数。
所以在这里它回到了今年(2018 年)的第 8 天,这意味着 1 月 8th.
这就是为什么您看到的是一月而不是三月。
为什么不使用 java.time
API?
LocalDate localDate = LocalDate.parse("2018-03-08");
如果你想把LocalDate
转换成java.util.Date
,你可以按照this answer.
我尝试解析一个日期字符串,但得到了错误的月份,为什么?
new SimpleDateFormat("yyyy-MM-DD", Locale.US).parse("2018-03-08")
为什么这个 returns 月是一月?
请查看截图:
您需要使用 dd
而不是 DD
试试这个:-
new SimpleDateFormat("yyyy-MM-dd", Locale.US).parse("2018-03-08");
看看这个 tutorial 如果您要显示月份名称,您应该使用 3 M,这不是 d
而不是 D
的日期标准
我建议尝试 yyyy-MMM-dd
我在下面尝试了这个,通过将 DD
更改为 dd
try {
Date date= new SimpleDateFormat("yyyy-MM-dd",Locale.US).parse("2018-03-08");
Calendar calendar= Calendar.getInstance();
calendar.setTime(date);
Log.d("MONTH ","" + calendar.get(Calendar.MONTH));
} catch (ParseException e) {
e.printStackTrace();
}
这是由于您使用的格式 "yyyy-MM-DD"
。解析器将按顺序解析:
- 您输入的值为
"2018-03-08"
yyyy
- 将带来 2018 年MM
- 将进入 MARCH 月份
但是DD
是什么?它是从年初算起的天数。
所以在这里它回到了今年(2018 年)的第 8 天,这意味着 1 月 8th.
这就是为什么您看到的是一月而不是三月。
为什么不使用 java.time
API?
LocalDate localDate = LocalDate.parse("2018-03-08");
如果你想把LocalDate
转换成java.util.Date
,你可以按照this answer.