Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不可解析的日期异常简单日期格式_Java_Date_Simpledateformat - Fatal编程技术网

Java 不可解析的日期异常简单日期格式

Java 不可解析的日期异常简单日期格式,java,date,simpledateformat,Java,Date,Simpledateformat,我正在尝试使用SimpleDataFormat将字符串解析为日期对象。 下面是我的代码 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

我正在尝试使用SimpleDataFormat将字符串解析为日期对象。 下面是我的代码

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)
yyyy-MM-dd'T'HH:mm:ss.SSSZ
我对这个问题的理解是,我在SDF中使用的格式字符串可能不合适。我对SimpleDateFormat不太熟悉。非常感谢您对我的帮助

编辑

已更新我的格式字符串,如下所示

yyyy-MM-dd'T'HH:mm:ss.SSS
此格式字符串能够将字符串解析为日期对象。但是当我试图在格式字符串的末尾包含Z以指定时区时,Z也在日期字符串中。它给出了解析异常

下面是引发解析异常的格式

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)
yyyy-MM-dd'T'HH:mm:ss.SSSZ
为什么会有这种行为?

试试这个

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date parsedDate = formatter.parse("2016-06-28T14:10:23.374Z");
System.out.println(parsedDate.toString());
输出是

Tue Jun 28 14:10:23 IST 2016

看看你的模式——它不是以Z结尾,而是以值结尾。同样,您的模式使用
hh
,这是一个每天1-12小时的格式说明符,但您的值为14。您是否阅读了
SimpleDataFormat
文档来检查模式的每一部分?请查看此文档以了解解析方法:另外,您正在尝试将毫秒解析为秒,但没有用于解析秒的模式。@JonSkeet。。查看文档后更改了格式字符串。。仍在获取错误。。请参阅我对问题的编辑查看
Z
格式说明符的含义。您应该改为使用
X
,或者像引用
T
一样引用
Z
,并在格式化程序中将时区设置为UTC。因此,解析10分钟23秒,但输出16分钟14秒。听起来不对,是吗?@ErwinBolwidt你知道为什么吗?小写的s将解析秒,你已经在模式中输入了两次。大写字母S解析毫秒。仍然错误。如果在模式中转义字母Z,则必须在
SimpleDataFormat
-对象上将时区设置为UTC(GMT0),以便以正确的方式处理输入的字母Z(对于7之前的旧Java版本)。或者更好地使用模式符号X(在Java-7中提供)。仅供参考,非常麻烦的旧日期时间类,例如,和
Java.text.SimpleDataFormat
,现在被Java 8和更高版本中内置的类所取代。看见