用Java解析日期字符串

时间:2018-09-24 13:07:04

标签: java datetime datetime-parsing parseexception

我的日期格式为“ 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);

这给我“无法解析的日期:”例外。谁能告诉我该怎么做?

2 个答案:

答案 0 :(得分:4)

在此示例中,您应考虑使用DateTimeFormatterZonedDateTimeDateSimpleDateFormat是旧类,容易出错,可能会出现问题;提到的新类(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));

您还可以使用OffsetDateTimeInstant(信用: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);

那样就可以了