我正在尝试使用以下模式"dd-mm-yyyy'T'HH:mmZ"
创建带有DateTimeFormatter的ZonedDateTime:
public static ZonedDateTime timeFromDayMonthYearHHmmTZ(String dateTime){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy'T'HH:mmZ");
return ZonedDateTime.parse(dateTime, formatter);
}
使用前面的代码,以下表达式正确解析:
ZonedDateTime dateTime1 = ZonedDateTimeUtils.dateTimeFromDayMonthYearHHmmTZ("25-01-2018T15:30-0100");
但是,下一个表达式会生成一个异常(请注意TZ偏移中的:
):
ZonedDateTime dateTime2 = ZonedDateTimeUtils.dateTimeFromDayMonthYearHHmmTZ("25-01-2018T15:30-01:00");
我的理解是,Z
模式中的"dd-mm-yyyy'T'HH:mmZ"
应涵盖这两种情况?但是我得到以下例外:
java.time.format.DateTimeParseException: Text '25-01-2018T15:30-01:00' could not be parsed at index 16
理想情况下,我希望有一个灵活的解决方案,我可以解析这两种模式。
答案 0 :(得分:6)
从我发现的情况来看,Z
似乎确实存在问题。
我找到了this question,在答案中,它使用XXX
作为偏移量。我尝试了它,它正在工作。我查看了一些变体,例如X
,XX
,Z
,ZZ
和ZZZ
,但只有XXX
工作正常。
完整模式为dd-MM-yyyy'T'HH:mmXXX
答案 1 :(得分:0)
要解决此错误,您需要使用X
代替Z
,因此...... "dd-MM-yyyy'T'HH:mmX"
如果您查看java docs,就会解释:
Z
允许-0800
X
允许三个-08; -0800; -08:00
因此,对于您的案例25-01-2018T15:30-01:00
,您需要使用后者。