在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;
}
}
答案 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
而不是X
或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
。参见documentation中的DateTimeFormatter
。