【问题标题】:String to Date conversion returning wrong value字符串到日期的转换返回错误的值
【发布时间】:2013-07-25 11:57:22
【问题描述】:

我正在尝试将字符串转换为日期...但是返回值是错误的。

String startDate = "2013-07-24";
Date date = new Date();
try{         
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD"); 
    date = (Date)formatter.parse(startDate);
    System.out.println(date);    
}
catch(Exception e){
    e.printStackTrace();
}

想要的输出是:

2013 年 7 月 25 日星期四 00:00:00 CDT

但实际输出是:

2013 年 1 月 25 日星期五 00:00:00 CST

月份如何从七月变成一月?

【问题讨论】:

  • 它返回了正确的值。你有错误的期望。

标签: java string date


【解决方案1】:

我看到的一个问题是:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD"); 

应该是:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

DD 表示 YEAR 中的第几天。阅读本文以获取有关SimpleDateFormat 的更多信息。

【讨论】:

    【解决方案2】:

    把DD换成dd;

    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
    

    【讨论】:

      【解决方案3】:

      DD 替换为dd 以匹配日期。

      DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
      

      根据SimpledateFormat documentation

      D一年中的一天

      d一个月中的一天

      【讨论】:

        【解决方案4】:

        月份中的某天使用小写的“d”,而您使用的是大写...

        改成:

        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        

        它会起作用的

        【讨论】:

          【解决方案5】:

          现代答案:

              String startDate = "2013-07-24";
              try {
                  LocalDate date = LocalDate.parse(startDate);
                  System.out.println(date);
              } catch (DateTimeParseException dtpe) {
                  System.out.println(dtpe.getMessage());
              }
          

          它打印的和输入的字符串一样:

          2013-07-24
          

          您的字符串符合 ISO 8601。这是现代 Java 日期和时间 API(称为 java.time 或 JSR-310)本机“理解”的内容,因此不需要显式格式化程序。这也是类的toString 方法通常产生的结果,这就是为什么您会得到相同的输出。如果您想以不同的格式输出,请使用DateTimeFormatter

          我建议不要打扰过时的SimpleDateFormat 和朋友。你真正问到的日期是 7 月,是一年中的第 24 天。显然不存在这样的日期,SimpleDateFormat 无论如何都会给你一些日期并假装一切都很好。我无法计算 Stack Overflow 上由过时类的这种令人惊讶的行为产生的问题。现代 API 更易于使用,并且在您犯错时会更加努力地告诉您(显然我们都会这样做)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-07-21
            • 2012-06-28
            • 1970-01-01
            • 1970-01-01
            • 2018-05-20
            • 1970-01-01
            • 2012-05-07
            相关资源
            最近更新 更多