【问题标题】:How to convert java.time.format.TemoralAccessor to java.util.Date如何将 java.time.format.TemporalAccessor 转换为 java.util.Date
【发布时间】:2021-02-25 09:48:25
【问题描述】:

如何将 TemporalAccessor 转换为 java.util.Date?

TemporalAccessor accessor = functionReturnsTemporalAccessor()
Date date = Date.from(accessor)

Date.from() 不接受 TemporalAccessor,有没有办法转换成 java.util.Date?

【问题讨论】:

  • 我认为您应该退后一步,问为什么该函数返回该类型。官方javadoc说这个接口是框架级接口,不应该在应用程序代码中广泛使用。不方便,因为你的代码不应该处理它......
  • DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(...) 返回 TemporalAccessor

标签: java date java.util.date datetime-conversion temporal


【解决方案1】:

DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(...) 返回 TemporalAccessor

没错。不要使用那种方法。请改用单参数 OffsetDateTime.parse(CharSequence)。示例:

    String isoOffsetDateTimeString = "2020-11-13T21:07:38.146120+01:00";
    OffsetDateTime dateTime = OffsetDateTime.parse(isoOffsetDateTimeString);
    Instant asInstant = dateTime.toInstant();
    Date oldfashionedDate = Date.from(asInstant);
    System.out.println(oldfashionedDate);

在我的时区输出:

2020 年 11 月 13 日星期五 21:07:38 CET

如果可以避免,也不要使用Date。该课程设计不良且早已过时。我假设您需要一个旧 API,而您现在无法升级到 java.time。

单参数OffsetDateTime.parse() 完全接受DateTimeFormatter.ISO_OFFSET_DATE_TIME 指定的格式,因此可以很好地替代您尝试的格式。

虽然可以将从DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse() 返回的TemporalAccessor 转换为Date,但这是不切实际的,您通常不能将TemporalAccessor 转换为Date。每个TemporalAccessor 都有一些它支持的字段和一些不支持的字段。由于Date(尽管有名称)是一个时间点,所以TemporalAccessor 需要定义一个时间点,并非所有TemporalAccessor 对象都这样做。

如果您已经习惯了旧的、设计不佳且现已过时的 Java 日期和时间类,例如 SimpleDateFormat 和 Date,那么您已经习惯于在格式化程序上调用方法 parse 和 format .使用 java.time 的传统方式正好相反:我们现在通常在日期时间类上调用静态 parse 方法,例如 OffsetDateTime,可选地提供 DateTimeFormatter 作为参数(在这种情况下不是必需的) )。同样,我们在日期时间对象上调用format 方法,再次传递DateTimeFormatter 作为参数。

【讨论】:

    【解决方案2】:

    我想这取决于您的方法返回的TemporalAccessor 的类型。但是您在 cmets 中提到的ISO_OFFSET_DATE_TIME 输出应该可以处理:

    TemporalAccessor accessor = functionReturnsTemporalAccessor();
    Date date = new Date(Instant.from(accessor).toEpochMilli());
    

    【讨论】:

      猜你喜欢
      • 2014-08-25
      • 1970-01-01
      • 2011-08-01
      • 2014-02-10
      • 2011-08-29
      • 2019-08-03
      • 2019-07-22
      • 2016-02-14
      相关资源
      最近更新 更多