【问题标题】:Java parse date string returns wrong month [duplicate]Java解析日期字符串返回错误的月份[重复]
【发布时间】:2018-08-16 13:09:06
【问题描述】:

我尝试解析一个日期字符串,但得到错误的月份,为什么?

new SimpleDateFormat("yyyy-MM-DD", Locale.US).parse("2018-03-08")

为什么返回月份为 Jan?

请查看截图:

【问题讨论】:

  • 使用 dd 而不是 DD 。前者为月日,后者为年日。
  • 尝试新的 SimpleDateFormat("yyyy-MM-dd", Locale.US).parse("2018-03-08");
  • 另请注意,在使用 SimpleDateFormat 之前调用 setLenient(false),可以防止某些尝试解释错误的 String。在您的情况下,尝试解析 String 会给出 java.text.ParseException: Unparseable date: "2018-03-08" 。
  • 顺便考虑扔掉早已过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .与它一起工作要好得多。它还将缓解您的问题:现代 LocalDate 类在没有任何显式格式化程序的情况下解析您的 2018-03-08,因为它是默认格式(ISO 8601)。所以没有办法弄错格式模式字符串。

标签: java android date simpledateformat date-parsing


【解决方案1】:

这是由于您使用的格式为"yyyy-MM-DD"。解析器会按顺序解析:

  • 您的输入值为"2018-03-08"
  • yyyy - 将带来 2018 年
  • MM - 将带来 MARCH 月份

但是DD 是什么?这是从年初开始的天数。 所以这里它移回到今年(2018 年)的第 8th 天,这意味着 1 月 8 日th。

这就是为什么您看到的是一月而不是三月。

【讨论】:

    【解决方案2】:

    为什么不使用java.time API?

    LocalDate localDate = LocalDate.parse("2018-03-08");
    

    如果您想将LocalDate 转换为java.util.Date,可以关注this answer。

    【讨论】:

      【解决方案3】:

      您需要使用dd 而不是DD

      试试这个:-

      new SimpleDateFormat("yyyy-MM-dd", Locale.US).parse("2018-03-08");
      

      【讨论】:

        【解决方案4】:

        我在下面尝试过,通过将 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();
                }
        

        【讨论】:

          【解决方案5】:

          查看此tutorial,如果您尝试显示月份名称,则应使用 3 M,这不是d 而不是D 的标准日期

          我建议尝试yyyy-MMM-dd

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多