繁体   English   中英

使用Java 8 DateTimeFormatter解析ZonedDateTime

[英]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作为偏移量。 我尝试了它,它正在工作。 我检查了一些变化,如XXXZZZZZZ ,但只有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM