如何使用单位数偏移解析时区? “周三12月31日00:00:00 GMT-8 1969”

时间:2016-07-09 00:53:47

标签: java date simpledateformat

我有这个日期:

"Wed Dec 31 00:00:00 GMT-8 1969"

但无法使用此SimpleDateFormat进行解析:

new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy");

如何在格式字符串中指定-8?我在阅读了SDF文档后尝试了ZX,但无济于事。我该怎么用?

2 个答案:

答案 0 :(得分:3)

-8的使用采用非ISO标准格式。

预计会有-0800-08:00之类的内容。这是因为时间偏移可能包括半小时。

您应该先对字符串运行预处理转换,然后再将其转换为SimpleDateFormat并将其更改为"Wed Dec 31 00:00:00 GMT-0800 1969" 并使用:

new SimpleDateFormat("EEE MMM dd hh:mm:ss Z yyyy");

如果您想简化一下,只需创建一个方法,将-8替换为America/Los_Angeles并使用ZZZ

答案 1 :(得分:2)

如果您使用的是java 8,则可以使用DateTimeFormatter喜欢的模式尝试"EEE MMM d HH:mm:ss O yyyy"

    String date = "Wed Dec 31 00:00:00 GMT-8 1969";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss O yyyy");
    LocalDateTime dateTime = LocalDateTime.parse(date, formatter);

O表示本地化的区域偏移,可以格式化区域偏移,如GMT + 8,GMT + 08:00,UTC-08:00。您可以在DateTimeFormatter中看到Offset O了解详情。