您可以使用此默认格式化程序:ISO_OFFSET_DATE_TIME(因为解析 )。2015-08-18T00:00+01:00
在文档中:
这将返回一个不可变格式化程序,该格式化程序能够格式化和分析 ISO-8601 扩展偏移日期时间格式。[...]
偏移 ID。如果偏移量有秒,则即使这不是ISO-8601标准的一部分,它们也会被处理。解析不区分大小写。
它是(您仅将此用于此默认格式化程序):
ID 与偏移量的标准 ISO-8601 格式字符串相比略有不同。有三种格式:
- Z - 代表世界标准时间 (ISO-8601)
- +hh:mm 或 -hh:mm - 如果秒数为零 (ISO-8601)
- +hh:mm:ss 或 -hh:mm:ss - 如果秒数不为零(不是 ISO-8601)(不喜欢 ISO-8601)。
+hh
似乎java.time(JDK 8)没有完全实现ISO-8601。
这:
java.time.ZonedDateTime.parse("2015-08-18T00:00+01:00"); // works
对应于(大致来自源JDK):
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DateTimeFormatter formatter = builder
.parseCaseInsensitive()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendOffsetId()
.toFormatter();
java.time.ZonedDateTime.parse("2015-08-18T00:00+01:00", formatter); // it's same
您可以使用DateTimeFormatterBuilder创建自己的DataTimeFormatter。
DateTimeFormatterBuilder builder2 = new DateTimeFormatterBuilder();
DateTimeFormatter formatter2 = builder2.parseCaseInsensitive()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("X") // eg.:
.toFormatter();
java.time.ZonedDateTime.parse("2015-08-18T00:00+01", formatter2); // here you set +01
不要使用 appendOffsetId() 并使用 appendPattern(String pattern) 并设置 'X' 或 'x'。
现在,您可以使用您的数据时间。2015-08-18T00:00+01
或。。。使用默认ISO_OFFSET_DATE_TIME并添加后缀 。:00
java.time.ZonedDateTime.parse("2015-08-18T00:00+01" + ":00");
但最后一个是不好的解决方案。