我正在尝试使用模式创建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上运行,所以我不确定这是否也会导致问题。
答案 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