如何在java.time.Instant中获取和设置指定时间?

新手上路,请多包涵

我有两个 java.time.Instant 对象

Instant dt1;
Instant dt2;

我想从 dt2 获取时间(只有小时和分钟没有日期)并将其设置为 dt1。最好的方法是什么?使用

dt2.get(ChronoField.HOUR_OF_DAY)

抛出 java.time.temporal.UnsupportedTemporalTypeException

原文由 kostepanych 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 891
1 个回答

您必须在某个时区解释 Instant 才能获得 ZonedDateTime 。当 Instant 测量从纪元 1970-01-01T00:00:00Z 的流逝秒数和纳秒时,你应该使用 UTC 来获得与 Instant 打印相同的时间。 ( Z ≙ 祖鲁时间 ≙ UTC )

得到时间

Instant instant;

// get overall time
LocalTime time = instant.atZone(ZoneOffset.UTC).toLocalTime();
// get hour
int hour = instant.atZone(ZoneOffset.UTC).getHour();
// get minute
int minute = instant.atZone(ZoneOffset.UTC).getMinute();
// get second
int second = instant.atZone(ZoneOffset.UTC).getSecond();
// get nano
int nano = instant.atZone(ZoneOffset.UTC).getNano();

还有一些方法可以获取日、月和年( getX )。

设定时间

瞬间是不可变的,因此您只能通过使用给定时间更改创建瞬间副本来“设置”时间。

 instant = instant.atZone(ZoneOffset.UTC)
        .withHour(hour)
        .withMinute(minute)
        .withSecond(second)
        .withNano(nano)
        .toInstant();

还有更改日、月和年的方法 ( withX ) 以及添加 ( plusX ) 或减去 ( minusX ) 值的方法.

要将时间设置为以字符串形式给出的值,请使用: .with(LocalTime.parse("12:45:30"))

原文由 frido 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题