我正在尝试创建一个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上运行,所以我不确定这是否也会导致问题。
为了实现您的愿望,您可以利用DateTimeFormatter类中的静态方法"ofPattern"。这个方法返回一个DateTimeFormatter对象。
如tna所示,您可以使用以下日期和时间格式字符串:
" yyyy-MM-dd 'HH: mm: ss。SSSXXX "
DateTimeFormatter test = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
我测试了代码,它可以编译。
来得太晚了,但是您必须在时间戳字符串中包含一些时区信息。否则,从哪个时区减去五个小时的偏移量将是未定义的。
假设你想解析一个时间戳比UTC晚5小时,你的字符串应该读为
2016 - 07 - 22 t00:00:00.000 Z
凌晨5
注意-05:00部分前的'Z',它是"UTC"的缩写
DateTimeFormatter
from "yyyy-MM-dd'T'HH:mm:ssX"
为我工作
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