解析ISO-8601日期时间

时间:2020-02-03 23:52:00

标签: java

在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;

        }
    }

1 个答案:

答案 0 :(得分:1)

您可以将模式传递给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而不是XXXXX,例如,在将解析的日期时间格式化为字符串时,这很明显:

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。参见documentation中的DateTimeFormatter