2

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

4 回答 4

2

为了实现您的愿望,您可以利用 DateTimeFormatter 类中的静态方法“ofPattern”。此方法返回一个 DateTimeFormatter 对象。

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

“yyyy-MM-dd'T'HH:mm:ss.SSSXXX”

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

我测试了代码并编译。

于 2016-08-22T22:29:35.267 回答
0

聚会迟到了,但您必须在时间戳字符串中包含一些时区信息。否则,它将无法定义您要从哪个时区减去五个小时的偏移量。

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

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

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

于 2018-10-29T09:52:34.593 回答
0

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

于 2021-01-27T19:13:21.850 回答
-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
于 2016-08-22T21:37:51.560 回答