首页 > 解决方案 > 如何使用 Java 时间库将符合 ISO 标准的字符串解析为日期

问题描述

我有各种格式的时间戳,例如:

2018-07-21T00:50:39
2017-11-20T23:18:27.529Z

我需要将它们解析为 java.util.Date,并尝试了以下方法,它们都适用于第一种格式,但第二种格式失败。

这是我尝试过的方法,但它是错误的:

1.

private Date try3(String dateString) {
        return Date.from(Instant.parse(dateString).atZone(ZoneId.of("UTC")).toInstant());
    }

它在第一种格式时失败,错误:

java.time.format.DateTimeParseException: Text '2017-11-20T23:18:28' could not be parsed at index 19

2.

private Date try2(String dateString) {
    return Date.from(LocalDateTime.parse(dateString).atZone(ZoneId.of("UTC")).toInstant());
}

对于第二种格式,此方法抛出错误:

java.time.format.DateTimeParseException: Text '2017-11-20T23:18:27.529Z' could not be parsed, unparsed text found at index 23

3:

private Date try1(String dateString) {
    return Date.from(ZonedDateTime.parse(dateString,
                    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss").withZone(ZoneId.of("UTC"))).toInstant());

}

对于第二种格式,上述方法抛出错误:

java.time.format.DateTimeParseException: Text '2017-11-20T23:18:27.529Z' could not be parsed, unparsed text found at index 19

我最终得到了Joda 图书馆

private Date try4(String dateString) {
        return new DateTime(dateString).withZone(DateTimeZone.UTC).toDate();
    }

但是在 Java 时间库中真的有办法做到这一点吗?

标签: javajava-timedatetime-parsingjava.util.date

解决方案



推荐阅读