即使阅读了大量教程,我也不是很了解 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/