Instant 类常用方法详解
Instant
类是 Java 8 引入的一个用于表示时间戳的重要类。在处理时间信息时,Instant
提供了丰富的方法来进行各种操作。下面我们将详细解释一些常用的方法,并为每个方法提供一个实例:
1. Instant.now()
// 获取当前时刻的 Instant 对象
Instant now = Instant.now();
System.out.println("Current Instant: " + now);
2. Instant.ofEpochSecond(long epochSecond)
// 通过给定的秒数从纪元开始创建 Instant 对象
Instant instant = Instant.ofEpochSecond(1616623980);
System.out.println("Instant from epoch seconds: " + instant);
3. Instant.ofEpochSecond(long epochSecond, long nanoAdjustment)
// 通过给定的秒数和纳秒数从纪元开始创建 Instant 对象
Instant instantWithNano = Instant.ofEpochSecond(1616623980, 500000000);
System.out.println("Instant from epoch seconds with nano adjustment: " + instantWithNano);
4. getEpochSecond()
// 获取从纪元开始的秒数部分
long epochSecond = instant.getEpochSecond();
System.out.println("Epoch Second: " + epochSecond);
5. getNano()
// 获取纳秒部分
int nano = instant.getNano();
System.out.println("Nano: " + nano);
6. plusSeconds(long seconds)
和 plusMillis(long millis)
// 增加秒数和毫秒数
Instant later = instant.plusSeconds(10).plusMillis(500);
System.out.println("Instant after adding seconds and millis: " + later);
7. minusSeconds(long seconds)
和 minusMillis(long millis)
// 减少秒数和毫秒数
Instant earlier = instant.minusSeconds(5).minusMillis(200);
System.out.println("Instant after subtracting seconds and millis: " + earlier);
8. isBefore(Instant other)
和 isAfter(Instant other)
// 比较两个 Instant 对象的先后顺序
boolean before = earlier.isBefore(later);
boolean after = later.isAfter(earlier);
System.out.println("Is earlier before later? " + before);
System.out.println("Is later after earlier? " + after);
9. compareTo(Instant other)
// 比较两个 Instant 对象,返回负数、零或正数
int comparison = instant.compareTo(instantWithNano);
System.out.println("Comparison result: " + comparison);
- 如果返回负数,表示当前对象小于比较对象。
- 如果返回零,表示当前对象等于比较对象。
- 如果返回正数,表示当前对象大于比较对象。
10. toString()
// 将 Instant 对象转换为字符串表示
String instantString = instant.toString();
System.out.println("Instant as String: " + instantString);
11. atZone(ZoneId zone)
// 将 Instant 转换为 ZonedDateTime 对象,以指定时区表示
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("UTC"));
System.out.println("ZonedDateTime representation: " + zonedDateTime);
12. equals(Object other)
// 判断两个 Instant 对象是否相等
Instant anotherInstant = Instant.ofEpochSecond(1616623980, 500000000);
boolean areEqual = instant.equals(anotherInstant);
System.out.println("Are the two Instants equal? " + areEqual);
13. hashCode()
// 获取 Instant 对象的哈希码
int hashCode = instant.hashCode();
System.out.println("HashCode of the Instant: " + hashCode);
14. truncatedTo(TemporalUnit unit)
// 截断 Instant 对象至指定的时间单元
Instant truncatedInstant = instant.truncatedTo(ChronoUnit.MINUTES);
System.out.println("Truncated Instant: " + truncatedInstant);
15. from(TemporalAccessor temporal)
// 从 TemporalAccessor 对象获取 Instant
LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 1, 12, 0);
Instant instantFromTemporal = Instant.from(localDateTime);
System.out.println("Instant from TemporalAccessor: " + instantFromTemporal);
16. toEpochMilli()
// 将 Instant 转换为毫秒数
long epochMilli = instant.toEpochMilli();
System.out.println("EpochMilli representation: " + epochMilli);
17. atOffset(ZoneOffset offset)
// 将 Instant 转换为带有偏移的 OffsetDateTime
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(3));
System.out.println("OffsetDateTime representation: " + offsetDateTime);
18. isSupported(TemporalUnit unit)
// 检查是否支持指定的时间字段
boolean isSupportedField = instant.isSupported(ChronoField.DAY_OF_WEEK);
System.out.println("Is day of week supported? " + isSupportedField);
19. plus(Duration amount)
和 minus(Duration amount)
// 使用 Duration 对象增加或减少时间
Duration durationToAdd = Duration.ofHours(2);
Instant instantAfterAddition = instant.plus(durationToAdd);
System.out.println("Instant after adding duration: " + instantAfterAddition);
Duration durationToSubtract = Duration.ofMinutes(30);
Instant instantAfterSubtraction = instant.minus(durationToSubtract);
System.out.println("Instant after subtracting duration: " + instantAfterSubtraction);
20. fromEpochMilli(long epochMilli)
// 从毫秒数创建 Instant 对象
long epochMilli = System.currentTimeMillis();
Instant instantFromEpochMilli = Instant.ofEpochMilli(epochMilli);
System.out.println("Instant from epochMilli: " + instantFromEpochMilli);
21. isSupported(TemporalField field)
// 检查是否支持指定的时间字段
boolean isSupportedField = instant.isSupported(ChronoField.DAY_OF_WEEK);
System.out.println("Is day of week supported? " + isSupportedField);
22. plusNanos(long nanos)
// 增加指定纳秒数
Instant instantAfterNanos = instant.plusNanos(1_000_000_000);
System.out.println("Instant after adding nanoseconds: " + instantAfterNanos);
23. minusNanos(long nanos)
// 减少指定纳秒数
Instant instantBeforeNanos = instant.minusNanos(500_000_000);
System.out.println("Instant before subtracting nanoseconds: " + instantBeforeNanos);
24. until(ChronoUnit unit, Instant endExclusive)
// 计算两个 Instant 之间的时间差
Instant anotherInstant = Instant.ofEpochSecond(1616623980, 500000000);
long secondsBetween = instant.until(anotherInstant, ChronoUnit.SECONDS);
System.out.println("Seconds between two Instants: " + secondsBetween);
25. query(TemporalQuery<R> query)
// 使用 TemporalQuery 查询 Instant 对象
LocalDate localDate = instant.query(TemporalQueries.localDate());
System.out.println("LocalDate from Instant: " + localDate);
26. with(TemporalAdjuster adjuster)
// 使用 TemporalAdjuster 调整 Instant 对象
Instant adjustedInstant = instant.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("Instant adjusted to last day of month: " + adjustedInstant);
27. from(TemporalAccessor temporal)
// 从 TemporalAccessor 对象获取 Instant
LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 1, 12, 0);
Instant instantFromTemporal = Instant.from(localDateTime);
System.out.println("Instant from TemporalAccessor: " + instantFromTemporal);
28. parse(CharSequence text)
// 从文本解析出 Instant 对象
String dateString = "2023-12-31T23:59:59Z";
Instant parsedInstant = Instant.parse(dateString);
System.out.println("Parsed Instant from text: " + parsedInstant);
29. from(TemporalAccessor temporal)
// 从 TemporalAccessor 对象获取 Instant
ZonedDateTime zonedDateTime = ZonedDateTime.of(2023, 1, 1, 12, 0, 0, 0, ZoneId.of("UTC"));
Instant instantFromTemporalAccessor = Instant.from(zonedDateTime);
System.out.println("Instant from TemporalAccessor: " + instantFromTemporalAccessor);