Jodatime格式错误,即使看起来正确

时间:2019-06-13 10:04:04

标签: java jodatime

我有这段代码

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:无效格式:“ 2019-06-13T17:57:47.420 + 08:00”格式错误,格式为“ .420 + 08:00”

形成的日期对我来说似乎正确?我在格式上做错了吗?

3 个答案:

答案 0 :(得分:1)

您的格式未指定毫秒,并且时区信息前不需要空格。

此格式将起作用:

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

答案 1 :(得分:1)

结果不是

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)

答案 2 :(得分:1)

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

    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

您知道吗?

  

请注意,Joda-Time被认为是很大程度上“完成”的项目。   没有计划进行重大增强。如果使用Java SE 8,请迁移   到java.time(JSR-310)。

引自the Joda-Time home page