当我运行以下代码(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 )
)
<标题> java.time h1> 的输入字符串看起来特别奇怪。小时没有补零,但秒有。很奇怪,但是它可以用现代的java解析。时间类。2015 - 03 - 27 t02:47:08
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 8, Java SE 9,以及更高版本
- 内置。
- 标准Java API的一部分,捆绑实现。
Java 9增加了一些小的特性和修复。
- 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport 。
- ThreeTenABP项目专门为Android适配ThreeTen-Backport(上文提到)。
Interval
、YearWeek
、YearQuarter
等。
标题>