Joda日期时间的月份错误



当我运行以下代码(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

你可以看到月份和小时是不正确的。

有什么建议吗?由于

年月日用大写M和小时H书写。

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

br

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

2015 - 03 - 27 t02:47:08

<标题> java.time h1> 的输入字符串看起来特别奇怪。小时没有补零,但秒有。很奇怪,但是它可以用现代的java解析。时间类。

Joda-Time项目现在处于维护模式,团队建议迁移到java。时间类。

您不恰当地尝试将缺乏任何偏移量或时区信息的日期时间值存储到使用时区的数据类型中。解析你的输入字符串作为一个LocalDateTime,因为我们没有指示偏移从utc或时区。

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。时间框架内置于Java 8及以后版本中。这些类取代了麻烦的旧的遗留日期时间类,如java.util.Date, Calendar, &SimpleDateFormat .

Joda-Time项目现在处于维护模式,建议迁移到java。时间类。

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。规格为JSR 310。

从哪里获取java。时间类?

  • Java SE 8Java SE 9,以及更高版本
    • 内置。
    • 标准Java API的一部分,捆绑实现。
  • Java 9增加了一些小的特性和修复。
  • Java SE 6Java SE 7
    • 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport
  • Android
    • ThreeTenABP项目专门为Android适配ThreeTen-Backport(上文提到)。
  • 参见如何使用ThreeTenABP…
  • ThreeTen-Extra项目扩展了java。有额外课程的时间。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等。

    相关内容

    • 没有找到相关文章

    最新更新