首页 > 解决方案 > 解析 ISO-8601 日期时间

问题描述

似乎在 Java 中解析 ISO-8601 的正确时间戳形式如下:

“2020-02-03T23:40:17+00:00”;

但是我的看起来像:

“2020-02-03T23:40:17+0000”;

我怎样才能正确解析这个?

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

 public class TestTime {
        public static void main(String[] args) {

            String ts = "2020-02-03T23:40:17+0000";
            DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_DATE_TIME;
            OffsetDateTime offsetDateTime = OffsetDateTime.parse(ts, timeFormatter);
            long timestamp = offsetDateTime.toEpochSecond() * 1000;

        }
    }

标签: java

解决方案


您可以将模式传递给DateTimeFormatter

String ts = "2020-02-03T23:40:17+0000";
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZZZ");
OffsetDateTime offsetDateTime = OffsetDateTime.parse(ts, timeFormatter);

请注意,偏移量的正确模式是ZZZ代替Xor XXXX,例如,当将解析的日期时间格式化回字符串时,这一点变得很明显:

DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
OffsetDateTime offsetDateTime = OffsetDateTime.parse(ts, timeFormatter);
System.out.println(offsetDateTime.format(timeFormatter));
2020-02-03T23:40:17Z

而在使用时ZZZ,它会像2020-02-03T23:40:17+0000. 请参阅. _DateTimeFormatter


推荐阅读