java.text.ParseException:无法解析的日期:“2018-05-23T06:39:37+0000”
java.text.ParseException: Unparseable date: "2018-05-23T06:39:37+0000"
我正在尝试根据从服务器收到的 String
创建一个 Date
。 String
是:
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
,但我遇到了同样的异常。
有什么建议吗?
给定的输入日期String
格式
2018-05-23T06:39:37+0000
不正确,因此您得到 ParseException
因为 毫秒 (SSS) 部分从您的日期格式 yyyy-MM-dd'T'HH:mm 中丢失:ss.SSSZ
所以请尝试
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);
我看到你在评论的帮助下解决了你自己的问题,但是我建议你认真考虑 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
我正在尝试根据从服务器收到的 String
创建一个 Date
。 String
是:
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
,但我遇到了同样的异常。
有什么建议吗?
给定的输入日期String
格式
2018-05-23T06:39:37+0000
不正确,因此您得到 ParseException
因为 毫秒 (SSS) 部分从您的日期格式 yyyy-MM-dd'T'HH:mm 中丢失:ss.SSSZ
所以请尝试
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);
我看到你在评论的帮助下解决了你自己的问题,但是我建议你认真考虑 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