java.text.ParseException:无法解析的日期:“2018-05-23T06:39:37 + 0000”

时间:2018-05-23 08:47:32

标签: java android date simpledateformat formatexception

我正在尝试从服务器收到的Date创建StringString是:

  

2018-05-23T06:39:37 + 0000

所以正确的格式应该是:

  

YYYY-MM-dd'T'HH:MM:ss.SSSZ

这是我的代码:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
try {
    Date parsedDate = simpleDateFormat.parse(createdDate);
    createdDate = parsedDate.toString();
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);

我不知道是否有办法做到这一点,因为之后我想再次解析下一种格式:

  

dd / MM / yyyy hh:mm

我尝试直接使用最后一种格式解析原始String,但我得到了同样的例外。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我看到你在评论的帮助下解决了自己的问题,不过我建议你认真考虑LocalDate,因为旧的日期课程有时很麻烦。

事实上,由于您的收到的值为TimeZone,因此您需要使用ZonedDateTime来解析您的输入。

String createdDate = "2018-05-23T06:39:37+0000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
ZonedDateTime localDate = ZonedDateTime.parse(createdDate, formatter);
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")));

<强>输出:

  

23/05/2018 06:39

答案 1 :(得分:1)

给定的输入日期String格式

  

2018-05-23T06:39:37 + 0000

不正确,因此您获得ParseException,因为日期格式中缺少毫秒(SSS)部分yyyy-MM-dd'T'HH:mm:ss。 SSS ž

所以请尝试

  

2018-05-23T06:39:37.235-0530

以下代码应该可以正常工作

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
    try {
        Date parsedDate = simpleDateFormat.parse(createdDate);
        createdDate = parsedDate.toString();
        System.out.println(parsedDate.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
mCommentDate.setText(createdDate);

答案 2 :(得分:0)

好的,第一个错误(正如你所指出的那样)是我原来的String没有毫秒。

simpleDateFormat删除“SSS”后,它就像一个魅力。所以这是最终的代码:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat defaultDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
    Date parsedDate = defaultDateFormat.parse(createdDate);
    SimpleDateFormat finalDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.getDefault());
    createdDate = finalDateFormat.format(parsedDate);
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);