java.text.ParseException: unparseable date: "2018-05-23T06:39:37+0000"



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

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

所以正确的格式应该是:

yyyy-MM-dd'T'HH:mm:ss.苏斯

这是我的代码:

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);

我不知道是否有任何方法可以做到这一点,因为在那之后我想再次解析为下一个格式:

日/月/年 hh:mm

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

有什么建议吗?

我看到您已经从评论中获得了一些帮助解决了自己的问题,但是我建议您认真考虑 LocalDate,因为较旧的 Date 类有时非常麻烦。

事实上,由于您的传入值具有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")));

输出:

2018-05-23 06:39

给定的输入日期String格式

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

不正确,因此您ParseException,因为您的日期格式 yyyy-MM-dd'T'HH:mm:ss.SSS Z 中缺少毫秒 (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);

好的,第一个错误(正如您所指出的(是我在原始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);

相关内容

最新更新