我有以下代码:
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);
即使我的日期格式很好,我也收到以下异常......
java.text.ParseException: Unparseable date: "1993-06-08T18:27:02.000Z"
at java.text.DateFormat.parse(DateFormat.java:337)
答案 0 :(得分:10)
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"));;
答案 1 :(得分:0)
answer by Sotirios Delimanolis是正确的。 Z
表示祖鲁时间,与UTC(+00:00)的零偏移。换句话说,没有调整到任何时区。
仅供参考,Joda-Time库使这项工作变得更加轻松,java.time package中的新Java 8也是如此。
您使用的格式由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();