如何将Instant_instant日期解析为iso_local_date? [重复]

问题描述 投票:-1回答:2

我正在尝试将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,但在这种情况下,只能设置一个月或一天。

java simpledateformat
2个回答
4
投票

解决方案>>

OffsetDateTime odt = OffsetDateTime.parse(date);
//uses DateTimeFormatter.ISO_OFFSET_DATE_TIME

详细信息

您可能会使用java.time软件包,因为它更容易使用,并且已经使用了几年,您会发现DateTimeFormatter.ISO_DATE_TIME

  1. 准备所需的格式化程序

    DateTimeFormatter.ISO_DATE_TIME
  2. 使用String date = "2019-11-02T01:35:22.679Z"; DateTimeFormatter input = DateTimeFormatter.ISO_OFFSET_DATE_TIME; DateTimeFormatter output = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 格式器解析输入文本

  3. ISO_DATE_TIME
  4. 仅保留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 部分

  5. LocalDate
  6. 将其格式化以获取需要显示的字符串

  7. LocalDate ld = zdt.toLocalDate();
    System.out.println(ld);            // 2019-11-02
    

0
投票

SimpleDateFormat只会为日期定义一个模式,而不是您传递给它的字符串的其余字符。您应该使用String formattedDate = ld.format(output); System.out.println(formattedDate); // 02.11.2019 这样的模式。

© www.soinside.com 2019 - 2024. All rights reserved.