【问题标题】:Wrong Month in Joda DateTimeJoda DateTime 中的月份错误
【发布时间】:2015-07-09 05:43:44
【问题描述】:

当我运行以下代码(Java)时:

DateTimeFormatter d_t = DateTimeFormat.forPattern("dd/m/yyyy h:mm:ss aa");
String date = "27/3/2015 2:47:08 AM";
DateTime result = DateTime.parse(date, d_t);

我总是得到结果:2015-01-27T02:47:08.000+02:00

如您所见,月份和时间不正确。

有什么建议吗? 谢谢

【问题讨论】:

    标签: datetime


    【解决方案1】:

    一年中的月份用大写字母M 和一天中的小时H 书写。

    试试

    DateTimeFormat.forPattern("dd/M/yyyy H:mm:ss aa");
    

    【讨论】:

    • 谢谢,我试过了,但不幸的是我得到了:无法解析“27/3/2015 2:47:08 AM”:由于时区偏移转换导致非法即时
    • 这是一个不同的问题,请在此处查看其他问题,例如stackoverflow.com/questions/26162702/…
    • 但是这个日期是有效日期
    • 我可以在我的机器上执行代码并且它运行良好。如果您点击上面的链接,您将获得有关您的错误和解决方案的更多详细信息,请尝试:DateTimeFormat.forPattern("dd/M/yyyy H:mm:ss aa").parseLocalDateTime("27/3/2015 2:47:08 AM");
    【解决方案2】:

    tl;博士

    LocalDateTime.parse( 
        "27/3/2015 2:47:08 AM" , 
        DateTimeFormatter.ofPattern( "d/M/uuuu h:m:s a" , Locale.US ) 
    )
    

    2015-03-27T02:47:08

    java.time

    您的输入字符串似乎特别奇怪。小时没有填充零,但第二个呢?奇怪,但它可以使用现代的 java.time 类进行解析。

    Joda-Time 项目现在位于maintenance mode,团队建议迁移到java.time 类。

    您不恰当地尝试将缺少任何偏移量或时区信息的日期时间值存储到使用时区的数据类型中。将您的输入字符串解析为LocalDateTime,因为我们没有迹象表明offset-from-UTC 或@ 987654326@.

    String input = "27/3/2015 2:47:08 AM";
    DateTimeFormatter f = DateTimeFormatter.ofPattern( "d/M/uuuu h:m:s a" , Locale.US );
    LocalDateTime ldt = LocalDateTime.parse( input , f );
    

    转储到控制台。

    System.out.println( input + " = " + ldt );
    

    27/3/2015 2:47:08 AM = 2015-03-27T02:47:08

    请注意,LocalDateTime 不是时间线上的一个点。它仅代表大约 26-27 小时范围内的一组可能时刻。在将值放在上下文中之前,它没有真正的意义,要么应用偏移量来获得OffsetDateTime,要么应用完整时区来获得ZonedDateTime


    关于java.time

    java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

    从哪里获得 java.time 类?

    ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-07
      • 2011-09-17
      • 2018-07-16
      • 2021-04-05
      • 1970-01-01
      • 2020-11-07
      • 2012-04-21
      • 2010-10-13
      相关资源
      最近更新 更多