java - 如何将 Instant 转换为 LocalTime?

标签 java datetime java-8

即使阅读了大量教程,我也不是很了解 TemporalAdjusters 或 Java 的新时间库。

如何将 Instant 对象转换为 LocalTime 对象。我在考虑以下内容:

LocalTime time = LocalTime.of(
    instantStart.get(ChronoField.HOUR_OF_DAY),
    instantStart.get(ChronoField.MINUTE_OF_HOUR)
);

但它不起作用。我该怎么做?

最佳答案

我的理解方式... Instant 是 UTC 风格的时间,始终与 UTC 区无关。 LocalTime 是独立于给定区域的时间。因此,如果 Instant 实现了 TemporalAccessor,您会期望以下内容能够工作,

Instant instant = Instant.now();
LocalTime local =  LocalTime.from(instant);

但您收到“无法从 TemporalAccessor 获取 LocalTime”错误。相反,您需要说明“本地”在哪里。没有默认值 - 可能是件好事。

Instant instant = Instant.now();
LocalTime local =  LocalTime.from(instant.atZone(ZoneId.of("GMT+3")));
System.out.println(String.format("%s => %s", instant, local));

输出

2014-12-07T07:52:43.900Z => 10:52:43.900

instantStart.get(ChronoField.HOUR_OF_DAY) 抛出错误,因为它在概念上不支持它,您只能通过 LocalTime 实例访问 HOUR_OF_DAY 等。

关于java - 如何将 Instant 转换为 LocalTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340650/

相关文章:

java - 加载位于加载器内的 Java 代理 JAR

c# - 将 DateTime 转换为 UTC 时的调整规则是什么?

Java 流到 String[] 数组

Java(8) : How to extract an specific class item from objects array?

java - 将 ResultSet 转换为 int 数组

java - 使用 JAXB 解码嵌套元素

java - 如何使用play.WS获取java.io.file?

c# - 如何在 C# 中对日期字段进行周末舍入(不使用 LINQ)?

datetime - Ubuntu 16.04 镜像中的 Docker 时区

java - Java 8 中的接口(interface)