此问题已经在这里有了答案:
我正在尝试将iso_instant解析为local_date,但是存在解析问题。
2019-11-02T01:35:22.679Z
02.11.2019
例如,我尝试过SimpleDateFormat:
try {
Date format1 = new SimpleDateFormat("yy-MM-dd").parse(events.get(0).getDate());
Log.e(TAG, events.get(0).getDate() + " / " + format1);
} catch (ParseException e) {
e.printStackTrace();
}
但是我仍然有一个错误:
无法解析文本'2019-11-02T01:35:22.679Z',未找到位于索引10的文本
我也尝试过使用ZonedTime,但在这种情况下,只能设置一个月或一天。
解决方案>>
OffsetDateTime odt = OffsetDateTime.parse(date); //uses DateTimeFormatter.ISO_OFFSET_DATE_TIME
详细信息
您可能会使用java.time
软件包,因为它更容易使用,并且已经使用了几年,您会发现DateTimeFormatter.ISO_DATE_TIME
准备所需的格式化程序
DateTimeFormatter.ISO_DATE_TIME
使用String date = "2019-11-02T01:35:22.679Z";
DateTimeFormatter input = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
DateTimeFormatter output = DateTimeFormatter.ofPattern("dd.MM.yyyy");
格式器解析输入文本
ISO_DATE_TIME
仅保留ZonedDateTime zdt = ZonedDateTime.parse(date, input);
System.out.println(zdt); // 2019-11-02T01:35:22.679Z
OffsetDateTime odt = OffsetDateTime.parse(date);
System.out.println(odt); // 2019-11-02T01:35:22.679Z
部分
LocalDate
将其格式化以获取需要显示的字符串
LocalDate ld = zdt.toLocalDate();
System.out.println(ld); // 2019-11-02
SimpleDateFormat只会为日期定义一个模式,而不是您传递给它的字符串的其余字符。您应该使用String formattedDate = ld.format(output);
System.out.println(formattedDate); // 02.11.2019
这样的模式。