![](/img/trans.png)
[英]Unable to obtain ZonedDateTime from TemporalAccessor using DateTimeFormatter and ZonedDateTime in Java 8
[英]Parsing ZonedDateTime with Java 8 DateTimeFormatter
我试图使用以下模式"dd-mm-yyyy'T'HH:mmZ"
使用DateTimeFormatter创建"dd-mm-yyyy'T'HH:mmZ"
:
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");
我的理解是, "dd-mm-yyyy'T'HH:mmZ"
模式中的Z
应该涵盖两种情况? 但是我得到以下异常:
java.time.format.DateTimeParseException: Text '25-01-2018T15:30-01:00' could not be parsed at index 16
理想情况下,我希望有一个灵活的解决方案,我可以解析这两种模式。
从我发现的,似乎肯定是Z
的问题。
我发现了这个问题 ,在答案中,它使用XXX
作为偏移量。 我尝试了它,它正在工作。 我检查了一些变化,如X
, XX
, Z
, ZZ
和ZZZ
,但只有XXX
工作正常。
完整的模式是dd-MM-yyyy'T'HH:mmXXX
要解决这个错误,你需要使用X
而不是Z
,所以... "dd-MM-yyyy'T'HH:mmX"
如果你看一下java文档,它会解释:
Z
允许-0800
X
允许三个-08; -0800; -08:00
-08; -0800; -08:00
因此,对于您的案例是25-01-2018T15:30-01:00
,您需要使用后者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.