【发布时间】:2017-10-20 14:30:37
【问题描述】:
我正在将旧的日期格式代码更新到 Java 8 并尝试 ZonedDateTime API。
日期格式与 Javascript Date 对象格式相同,例如: -
2017 年 5 月 25 日星期四 10:00:00 GMT+1200(新西兰标准时间)
我之前使用的是以下格式 -
EEE MMM dd yyyy hh:mm:ss 'GMT'Z '('zzzz')'
此格式无法使用 DateTimeFormatter.ofPattern 方法解析日期字符串。
代码如下:
public static final String DATE_FORMAT = "EEE MMM dd yyyy hh:mm:ss 'GMT'Z '('zzzz')'";
public static void main(String[] args) throws ParseException {
String sDate = "Thu May 25 2017 10:00:00 GMT+1200 (New Zealand Standard Time)";
parseDate(sDate);
}
private static void parseDate(String sDate) throws ParseException {
// works
DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
Date oldDate = dateFormat.parse(sDate);
//FIXME: can't parse?!
ZonedDateTime newDate = ZonedDateTime.parse(
sDate, DateTimeFormatter.ofPattern(DATE_FORMAT)); // <- this is the line 25!
}
这是我可以编译和运行的完整代码供参考 - https://gist.github.com/bhabanism/470e03db54981ad6ddedbba316dcaa9a
这在第 25 行失败:
线程“主”java.time.format.DateTimeParseException 中的异常: 文本“2017 年 5 月 25 日星期四 10:00:00 GMT+1200(新西兰标准时间)” 无法解析:无法从中获取 ZonedDateTime 时间访问器:{HourOfAmPm=10, MilliOfSecond=0, MinuteOfHour=0, OffsetSeconds=43200, MicroOfSecond=0, NanoOfSecond=0, SecondOfMinute=0},ISO,Pacific/Auckland 解析为 2017-05-25 类型 java.time.format.Parsed
注意,我不能改变日期的输入格式,它必须是
2017 年 5 月 25 日星期四 10:00:00 GMT+1200(新西兰标准时间)
我当然可以修改格式化程序
EEE MMM dd yyyy hh:mm:ss 'GMT'Z '('zzzz')'
【问题讨论】: