java.text.ParseException:无法解析的日期"YYYY-MM-dd'T'HH:MM:ss.SSSXXX" - 的SimpleDateFormat

Pet*_*r T 0 java date simpledateformat datetime-parsing

我用以下代码解析datetime:

String parseDate(String tranDateTime, String originalDateFormat, String toDateFormat) throws ParseException {
    SimpleDateFormat originalMonthYear = new SimpleDateFormat(originalDateFormat);
    Date date = originalMonthYear.parse(tranDateTime);

    SimpleDateFormat formatter = new SimpleDateFormat(toDateFormat);
    return formatter.format(date);
}
Run Code Online (Sandbox Code Playgroud)

并尝试解析日期时间值,如下所示:

parseDate("2017-08-16T00:00:00Z", 
          "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

抛出异常:

java.text.ParseException:无法解析的日期:"2017-08-16T00:00:00Z"

但是,当我更改日期值时"2017-08-16T02:54:15.537Z",功能正常.我不知道为什么.

Mic*_*ael 5

问题来自:

Date date = originalMonthYear.parse(tranDateTime);
Run Code Online (Sandbox Code Playgroud)

这个日期

2017-08-16T00:00:00Z
Run Code Online (Sandbox Code Playgroud)

与模式不匹配

yyyy-MM-dd'T'HH:mm:ss.SSSXXX
Run Code Online (Sandbox Code Playgroud)

因为缺少毫秒(SSS部分)

所以

Date date = originalMonthYear.parse(tranDateTime);
Run Code Online (Sandbox Code Playgroud)

抛出异常

java.text.ParseException: Unparseable date: "2017-08-16T00:00:00Z"
Run Code Online (Sandbox Code Playgroud)

解决方案

  • 将您的日期更改2017-08-16T00:00:00Z2017-08-16T00:00:00.000Z(添加毫秒到您的日期)
  • 将模式更改yyyy-MM-dd'T'HH:mm:ss.SSSXXXyyyy-MM-dd'T'HH:mm:ssXXX(从模式中删除毫秒)