我的日期格式为“ yyyy-MM-dd'T'HH:mm:ss.sssZ”。例如,日期为“ 2018-07-17T09:59:51.312Z”。我正在使用下面的代码来解析Java中的String。
String date="2018-07-17T09:59:51.312Z";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sssZ");
Date transactionDateTime = simpleDateFormat.parse(date);
这给我“无法解析的日期:”例外。谁能告诉我该怎么做?
答案 0 :(得分:4)
在此示例中,您应考虑使用DateTimeFormatter和ZonedDateTime。 Date
和SimpleDateFormat
是旧类,容易出错,可能会出现问题;提到的新类(Java8 +)更加健壮。
并将模式结尾从...mm:ss.sssZ
更改为...mm:ss.SSSz
。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");
ZonedDateTime zonedDateTime = ZonedDateTime.parse(date, formatter);
System.out.println(formatter.format(zonedDateTime));
您还可以使用OffsetDateTime或Instant(信用:Ole V.V)为您进行解析,并提供相同的输出:
System.out.println(OffsetDateTime.parse("2018-07-17T09:59:51.312Z"));
System.out.println(Instant.parse("2018-07-17T09:59:51.312Z"));
输出:
2018-07-17T09:59:51.312Z
答案 1 :(得分:0)
您忘记在'
之前添加Z - RFC 822 time zone (-0800)
String date = "2018-07-17T09:59:51.312Z";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date transactionDateTime = simpleDateFormat.parse(date);
那样就可以了