Instant


created: 2022-07-23T14:18:23+08:00
updated: 2022-07-23T14:27:38+08:00
tags:

  • DateTimeAPI
  • DateTimeAPI/Instant

Instant

The Instant Class

Date-Time API 的核心类之一是 Instant 类,它表示时间轴上一纳秒的开始。此类对于生成表示机器时间的时间戳很有用。

Instant timestamp = Instant.now();

发生在 epoch 之前的瞬间具有负值,发生在 epoch 之后的瞬间具有正值。

Instant 类提供的其他常量是 MIN,表示可能的最小(远过去)时刻,和 MAX,表示最大(远将来)时刻。

Instant 上调用 toString() 会产生如下输出:

2013-05-30T23:38:23.085Z

此格式遵循用于表示日期和时间的 ISO-8601 标准。

Instant 类提供了多种操作 Instant 的方法。有 plus()minus() 方法用于增加或减少时间。以下代码将当前时间增加 1 小时:

Instant oneHourLater = Instant.now().plus(1, ChronoUnit.HOURS);

有比较瞬间的方法,例如 isAfter()isBefore()until() 方法返回两个 Instant 对象之间存在的时间。以下代码行报告自 Java 纪元开始以来已经发生了多少秒。

long secondsFromEpoch = Instant.ofEpochSecond(0L).until(Instant.now(),
                        ChronoUnit.SECONDS);

Instant 类不适用于人类时间单位,例如年、月或日。如果要以这些单位执行计算,可以通过将 Instant 与时区绑定来将 Instant 转换为另一个类,例如 LocalDateTimeZonedDateTime。然后,您可以访问所需单位的值。以下代码使用 ofInstant() 方法和默认时区将 Instant 转换为 LocalDateTime 对象,然后以更易读的形式打印出日期和时间:

Instant timestamp;

LocalDateTime ldt = LocalDateTime.ofInstant(timestamp, ZoneId.systemDefault());
System.out.printf("%s %d %d at %d:%d%n", ldt.getMonth(), ldt.getDayOfMonth(),
                  ldt.getYear(), ldt.getHour(), ldt.getMinute());

result

MAY 30 2021 at 18:21

ZonedDateTimeOffsetDateTime 对象都可以转换为 Instant 对象,因为每个对象都映射到时间轴上的确切时刻。然而,反过来是不正确的。要将 Instant 对象转换为 ZonedDateTimeOffsetDateTime 对象,需要提供时区或时区偏移信息。

[[解析和格式化]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值