如何将Instant转换为LocalTime?

时间:2014-12-07 07:29:27

标签: java datetime java-8

即使在阅读了大量教程之后,我还没有真正了解时间调整者或Java的新时间库。

如何将Instant对象转换为LocalTime对象。我正在思考以下几点:

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

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

1 个答案:

答案 0 :(得分:17)

我理解它的方式......即时是UTC风格的时间,不知道区域总是UTC。 LocaleTime是给定区域的时间。因此,如果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等。