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.