如何从 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
会丢弃有关我们拥有的时间点的信息。当我们转换为 ZonedDateTime
或 OffsetDateTime
时,我们可以保留这些信息。如果你想用 UTC 解释日期(如前面的例子),例如:
String result = instant.atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_LOCAL_DATE);
这使得操作取决于选择的 UTC 解释更加明确。
我有一个 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
会丢弃有关我们拥有的时间点的信息。当我们转换为 ZonedDateTime
或 OffsetDateTime
时,我们可以保留这些信息。如果你想用 UTC 解释日期(如前面的例子),例如:
String result = instant.atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_LOCAL_DATE);
这使得操作取决于选择的 UTC 解释更加明确。