Joda DateTime的错误月份

时间:2015-07-09 05:43:44

标签: datetime

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

您可以看到月份和小时数不正确。

有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:0)

一年中的一个月使用大写M以及一天中的小时H

尝试

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

答案 1 :(得分:0)

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,因为我们没有{{3}的指示}或offset-from-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

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

现在位于SimpleDateFormatJoda-Time项目建议迁移到maintenance mode类。

要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial

从哪里获取java.time类?

How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-ExtraIntervalYearWeekYearQuarter