如何创建合适的DateTimeFormatter模式



我正在尝试创建一个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

相关内容

  • 没有找到相关文章

最新更新