【问题标题】:Year changed to 0000 after dateTimeFormat在 dateTimeFormat 之后年份更改为 0000
【发布时间】:2020-09-05 02:22:58
【问题描述】:

我正在尝试将 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);

【问题讨论】:

  • 你为什么不用java.time?是否支持旧版本的 java 或 android?

标签: java datetime jodatime datetime-format


【解决方案1】:

周年

 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 使用前三位小数表示毫秒并忽略其余部分。

链接: Documentation of DateTimeFormat

【讨论】:

  • 如果你想在几毫秒内修复你的代码,你应该使用SDateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSSSSS").parseLocalDateTime(dateTimeString)这样的东西
  • 是的,@VikashTiwari,好点子。我刚刚编辑了答案以包含这条信息。
  • 现在看起来好多了。
【解决方案2】:

带有 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);

【讨论】:

  • 啊,将 xxxxxx 替换为 SSSSS 已修复。谢谢!虽然仍不清楚为什么它会像这样影响这一年。
【解决方案3】:

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

为了解决你手头的问题,你可以使用

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

【讨论】:

  • 正确。你为什么要重复它?
  • 哎呀我已经起草了它,当我写它时,你的答案在格式上没有必要的变化。但我现在看到,您已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 2023-02-04
  • 2021-05-22
  • 2021-08-13
  • 1970-01-01
  • 2011-07-09
  • 2013-03-01
  • 2018-04-05
  • 1970-01-01
相关资源
最近更新 更多