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();