【发布时间】:2016-06-29 06:51:52
【问题描述】:
我正在尝试使用 SimpleDateFormat 将字符串解析为日期对象。 下面是我的代码
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm.sss");
Date parsedDate = formatter.parse("2016-06-28T14:10:23.374Z");
System.out.println(parsedDate.toString());
这给了我以下异常
Exception in thread "main" java.text.ParseException: Unparseable date: "2016-06-28T14:10:23.374Z"
at java.text.DateFormat.parse(DateFormat.java:368)
at com.bac.rds.dolphin.test.Main.main(Main.java:60)
我对这个问题的理解是,我在 SDF 中使用的格式字符串可能不合适。我对 SimpleDateFormat 不太熟悉,感谢任何帮助以使其正常工作。
编辑
已将我的格式字符串更新如下
yyyy-MM-dd'T'HH:mm:ss.SSS
此格式字符串能够将字符串解析为日期对象。但是,当我尝试在格式字符串的末尾包含 Z 以指定时区时,Z 也存在于我拥有的日期字符串中。它给出了解析异常。
下面是抛出解析异常的格式
yyyy-MM-dd'T'HH:mm:ss.SSSZ
为什么会有这种行为?
【问题讨论】:
-
看看你的模式——它不以 Z 结尾,但值是。同样,您的模式使用
hh,它是一天中 1-12 小时的格式说明符,但您的值的值为 14。您是否阅读了SimpleDateFormat文档来检查您的模式的每个部分? -
看看这个文档来了解解析方法:docs.oracle.com/javase/7/docs/api/java/text/…
-
另外,您正在尝试将毫秒解析为秒,并且没有解析秒的模式。
-
@JonSkeet .. 浏览文档后更改了格式字符串 .. 仍然出现错误 .. 请查看我对问题的编辑
-
查看
Z格式说明符的含义。您应该改用X,或者像引用T一样引用Z,并在格式化程序中将时区设置为UTC。
标签: java date simpledateformat