Jodatime 畸形即使它看起来正确

Jodatime malformation even if it looks correct

我有这段代码

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss Z");
DateTime dateNow = dtf.parseDateTime(new DateTime().toString());
String registerDateStr = dateNow.toString();

但是当我 运行 它时,它说格式错误的日期:

java.lang.IllegalArgumentException: Invalid format: "2019-06-13T17:57:47.420+08:00" is malformed at ".420+08:00"

形成的日期对我来说似乎是正确的?我是不是格式有问题?

您的格式没有指定毫秒,并且在时区信息之前有一个不需要的 space。

此格式适用:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

结果不应该是

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

来自 javadoc,

Symbol         Meaning                     Presentation      Examples  
------      -------                     ------------      -------

   H       hour-of-day (0-23)          number            0
   m       minute-of-hour              number            30
   s       second-of-minute            number            55
   S       fraction-of-second          fraction          978

您的格式 yyyy-MM-dd'T'HH:mm:ss Z 无效,因为您遗漏了 S(秒的小数部分,在您的字符串中显示为 .420)

你太辛苦了。您根本不需要任何显式格式化程序。

    DateTime dateNow = new DateTime();
    String registerDateStr = dateNow.toString();

    System.out.println(registerDateStr);

我刚才运行时输出:

2019-06-13T13:04:48.301+02:00

如果你愿意,你也可以在没有格式化程序的情况下解析字符串,但我认为你没有理由这样做,因为你只会得到一个 DateTime 等于你开始的对象的对象:

    DateTime parsedBack = DateTime.parse(registerDateStr);
    System.out.println(parsedBack);

2019-06-13T13:04:48.301+02:00

你知道吗?

Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).

引自the Joda-Time home page