在 dateTimeFormat 之后年份更改为 0000

Year changed to 0000 after dateTimeFormat

我正在尝试将 dateTime 从字符串转换为 org.joda.time.LocalDateTime。我下面代码中的变量 actualLocalDateTime 设置为:0000-03-05T14:00:09.000,而不是 2020-03-05T14:00:09.000。 我在这里错过了什么?

DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.xxxx");
String dateTimeString = "2020-03-05 14:00:09.000000";
LocalDateTime actualLocalDateTime = DATE_TIME_FORMATTER.parseLocalDateTime(dateTimeString);

使用 joda 时间库。

        org.joda.time.format.DateTimeFormatter USPS_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
        String dateTimeString = "2020-03-05 14:00:09.000000";
        org.joda.time.LocalDateTime actualLocalDateTime = USPS_DATE_TIME_FORMATTER.parseLocalDateTime(dateTimeString);
        System.out.println(actualLocalDateTime);

周年

 Symbol  Meaning                      Presentation  Examples
 ------  -------                      ------------  -------
 x       weekyear                     year          1996

您使用 xxxx 来解析似乎是秒的小数部分。模式字母 x 用于基于周的年份。因此,由于分数为 0,因此您将年份设置为 0。

解决方案:使用 SSSSSS 代替 xxxx,如 Sanjay 的正确答案所示。

S       fraction of second           millis        978

文档说 millis(所以毫秒),但解析 .000000(微秒)也有效。您需要指定精确的小数位数,因此 SSSSSS。什么时候发生的是 Joda-Time 使用前三位小数表示毫秒而忽略其余部分。

Link: Documentation of DateTimeFormat

如之前的回答所述,您对日期字符串使用了错误的语法。 x 用于一年中的第几周(阅读 here

要解决您手头的问题,您可以使用

DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSSSSS").parseLocalDateTime(dateTimeString)