java.text.Parseexception:Unparseable Date

我有以下代码:

String ModifiedDate = "1993-06-08T18:27:02.000Z" ; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); Date ModDate = sdf.parse(ModifiedDate); 

即使我的日期格式很好,我也得到以下exception…

 java.text.ParseException: Unparseable date: "1993-06-08T18:27:02.000Z" at java.text.DateFormat.parse(DateFormat.java:337) 

Z模式后者表示RFC 822时区。 你的字符串

 String ModifiedDate = "1993-06-08T18:27:02.000Z" ; 

不包含这样的时区。 它字面上包含一个Z

你需要一个日期模式,与文字T类似,有一个文字Z

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 

如果您打算用Z表示Zulu时间,请在构造SimpleDateFormat时将其添加为时区

 sdf.setTimeZone(TimeZone.getTimeZone("Zulu"));; 

Sotirios Delimanolis的回答是正确的。 Z表示祖鲁时间,与UTC(+00:00)的零偏移。 换句话说,没有调整到任何时区。

乔达时间

仅供参考, Joda-Time库使得这项工作变得更加容易, Java 8中的新java.time包也是如此。

您使用的格式由ISO 8601标准定义。 Joda-Time和java.time默认解析并生成ISO 8601字符串。

Joda-Time中的DateTime知道自己指定的时区。 因此,作为解析过程的一部分,请指定要调整的时区。

 DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" ); DateTime dateTime = new DateTime( "1993-06-08T18:27:02.000Z", timeZone ); String output = dateTime.toString(); 

如果需要,可以将DateTime对象保留在Universal Time中 。

 DateTime dateTime = new DateTime( "1993-06-08T18:27:02.000Z", DateTimeZone.UTC ); 

当其他类需要时,您可以生成java.util.Date对象。

 java.util.Date date = dateTime.toDate();