如何从 java 中的 Instant 对象获取 yyyy-MM-dd 8.?

How to get yyyy-MM-dd from an Instant object in java 8.?

我有一个 Instant 对象。我想将 yyyy-MM-dd 作为字符串。我怎样才能实现它?

Instant defaultTime = Instant.now().truncatedTo(ChronoUnit.SECONDS);
System.out.println(defaultTime); // print 2021-03-26T00:00:00Z

如何获得"2021-03-26"

我建议转换为 LocalDateTime,然后像

一样使用 DateTimeFormatter
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
String result = ldt.format(DateTimeFormatter.ISO_LOCAL_DATE);

您可以找到格式化程序列表 here,或使用您自己的模式

其他方式

正如@Holger 在评论中所说,DateTimeFormatter.ISO_LOCAL_DATE.withZone(ZoneOffset.UTC) 生成了一个格式化程序,可以直接格式化 Instant 并且可以共享和重用以格式化很多瞬间。

static final DateTimeFormatter INSTANT_FORMATTER
        = DateTimeFormatter.ISO_LOCAL_DATE.withZone(ZoneOffset.UTC);

点赞

    String result = INSTANT_FORMATTER .format(instant);

@Ole V.V。提到在我的第一个片段中转换为 LocalDateTime 会丢弃有关我们拥有的时间点的信息。当我们转换为 ZonedDateTimeOffsetDateTime 时,我们可以保留这些信息。如果你想用 UTC 解释日期(如前面的例子),例如:

    String result = instant.atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_LOCAL_DATE);

这使得操作取决于选择的 UTC 解释更加明确。