i具有包含格式日期的数据流" yyyy-mm-dd hh:mm:ss z",其中需要保留时区,同时进一步传播日期。以下是测试程序(带有错误堆栈) - 我的解决方案中有什么问题?
public class Test {
public static void main(String[] args) {
try {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");
ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
System.out.println(zdt);
} catch (Exception e) {
System.err.println("Exception in 1st approach: " + e.getMessage());
}
try {
DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd hh:mm:ss z").toFormatter();
ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
System.out.println(zdt);
} catch (Exception e) {
System.err.println("Exception in 2nd approach: " + e.getMessage());
}
}
}
输出(异常消息):
第一个方法中的例外:文本'2016-12-09 09:30:21 UTC'不可能是 解析:无法从teermalaccessor获得ZonedDateTime: {hourofampm = 9,分钟小时= 30,microofsecond = 0,secondofminute = 21, nanoofsecond = 0,milliofsecond = 0},ISO,UTC已解决至2016-12-09 键入java.time.format.parsed
第二种方法中的例外:文本'2016-12-09 09:30:21 UTC'不可能是 解析:无法从teermalaccessor获得ZonedDateTime: {hourofampm = 9,分钟小时= 30,microofsecond = 0,secondofminute = 21, nanoofsecond = 0,milliofsecond = 0},ISO,UTC已解决至2016-12-09 键入java.time.format.parsed
JDK版本1.8.0_111
我已经在Zoneddateetime标签中读了类似的问题,但找不到解决方案。
您应该使用 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
而不是使用
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");
因此,您的模式中的h
必须为H
。根据文档定义clock-hour-of-am-pm
时使用h
,因此您还应在PATERN中将a
作为CC_6,或者仅使用H