如何创建正确的DateTimeFormatter模式

时间:2016-08-22 21:19:07

标签: java datetime format jodatime

我正在尝试使用模式创建DateTimeFormatter对象以适合此时间表达式:2016-07-22T00:00:00.000-05:00。我正在尝试使用带有上述输入字符串的DateTimeFormatter类创建DateTime对象。

我已经尝试了以下表达的许多不同版本,但我目前陷入时区片段" -05:00"我在junit测试用例中收到错误的地方:

java.lang.IllegalArgumentException: Invalid format: "2016-07-22T00:00:00.000-05:00" is malformed at "-05:00"

我正在使用的当前格式模式是:

yyyy-MM-dd'T'HH:mm:ss.SSSZ

我也尝试过:

yyyy-MM-dd'T'HH:mm:ss.SSSTZD
yyyy-MM-dd'T'HH:mm:ss.SSSZZZ
yyyy-MM-dd'T'HH:mm:ss.SSSz
yyyy-MM-dd'T'HH:mm:ss.SSSzzz
yyyy-MM-dd'T'HH:mm:ss.SSS'TZD'

我在Java 7上运行,所以我不确定这是否也会导致问题。

4 个答案:

答案 0 :(得分:1)

为了实现您的目标,您可以使用静态方法" ofPattern"在DateTimeFormatter类中。此方法返回DateTimeFormatter对象。

如tnas所示,您可以使用以下日期和时间格式字符串:

" YYYY-MM-DD' T' HH:MM:ss.SSSXXX"

DateTimeFormatter test = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

我测试了代码然后编译。

答案 1 :(得分:0)

晚聚会,但您必须在时间戳字符串中包含一些时区信息。否则,您将不希望从哪个时区中减去五个小时的偏移量。

假设您要解析比UTC晚5小时的时间戳,则您的字符串应为

  

2016-07-22T00:00:00.000 Z -05:00

请注意-05:00部分之前的'Z',它是“ UTC”的缩写

答案 2 :(得分:0)

来自 DateTimeFormatter

"yyyy-MM-dd'T'HH:mm:ssX" 为我工作。

答案 3 :(得分:-1)

API的javadoc描述了模式:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

我已经测试了这段代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date date = new Date();
System.out.println(sdf.format(date));

输出结果为:

2016-08-22T18:34:26.604-03:00