Java OffsetDateTime 类

2024 年 10 月 25 日 | 阅读 6 分钟

Java 中的 OffsetDateTime 类是 Java 8 中引入的 java.time 包的一个关键组件。它表示带有时区偏移的日期时间,这对于处理时区和夏令时变化至关重要。它将日期和时间与偏移量相结合,以准确处理时区不同的情况或适用夏令时的情况。

OffsetDateTime 类的特点

不可变性: OffsetDateTime 的实例是不可变的,这意味着一旦创建,它们的值就不能更改。

精度: 它以纳秒精度存储日期、时间和偏移量,从而可以进行精确的计算。

偏移量: 它包含与 UTC 的偏移量,这对于处理时区差异至关重要。

兼容性: OffsetDateTime 旨在与 java.time 包中的其他日期时间类兼容,便于无缝转换和互操作。

范围: 它涵盖了从 0001 年 1 月 1 日到 9999 年 12 月 31 日的日期范围,并支持所有有效的偏移量。

与其他日期时间类的区别

LocalDateTime: LocalDateTime 不包含任何偏移量信息,也不与任何特定的时区相关联。它表示没有时区信息的日期和时间。

ZonedDateTime: ZonedDateTime 包含日期、时间和时区信息。它表示一个考虑时区规则和夏令时变化的时刻。

Instant: Instant 表示 UTC 时区中的一个时间点,与任何偏移量或时区规则无关。

Java OffsetDateTime 类声明

让我们看看 java.time.OffsetDateTime 类的声明。

说明

1. public final class OffsetDateTime extends Object

public final class: 这表示 OffsetDateTime 是 Java 中的一个公共最终类。作为一个最终类,这意味着它不能被其他类继承或扩展。这种设计决策确保了 OffsetDateTime 的行为不会被子类更改或覆盖。

OffsetDateTime: 这是类的名称。它表示带有时区偏移的日期时间,并且是 Java 8 中引入的 java.time 包的一部分。

extends Object: 在 Java 中,除非明确指定,否则所有类都隐式地继承 Object 类。Object 类是 Java 中类层次结构的根,为所有对象提供常见的方法,例如 toString()、hashCode() 和 equals()。

2. implements Temporal, TemporalAdjuster, Comparable<OffsetDateTime>, Serializable

implements Temporal: 这表明 OffsetDateTime 类实现了 Temporal 接口。Temporal 接口是日期和时间 API (java.time.temporal 包) 的一部分,表示可以操作的日期时间对象。

implements TemporalAdjuster: OffsetDateTime 还实现了 TemporalAdjuster 接口。此接口允许基于规则操作对象,例如调整到下一周或上一周的日期。

Comparable<OffsetDateTime>: OffsetDateTime 使用自身作为类型参数实现 Comparable 接口。这意味着 OffsetDateTime 的实例可以使用 compareTo() 等方法相互比较,从而实现排序和排序操作。

Serializable: 此接口表明 OffsetDateTime 的实例可以被序列化,这意味着它们可以被转换为字节流以进行存储或传输,然后反序列化回对象。这允许 OffsetDateTime 实例被持久化或通过网络发送。

Java OffsetDateTime 类的方法

方法描述
int get(TemporalField field)它用于从此日期时间获取指定字段的值作为 int。
int getDayOfMonth()它用于获取月份的日字段。
iint getDayOfYear()它用于获取一年中的日字段。
DayOfWeek getDayOfWeek()它用于获取星期几字段,它是一个枚举 DayOfWeek。
OffsetDateTime minusDays(long days)它用于返回此 OffsetDateTime 的一个副本,其中减去了指定的日数。
static OffsetDateTime now()它用于从系统时钟获取默认时区中的当前日期时间。
OffsetDateTime plusDays(long days)它用于返回此 OffsetDateTime 的一个副本,其中添加了指定的日数。
LocalDate toLocalDate()它用于获取此日期时间部分的 LocalDate 部分。
Temporal adjustInto(Temporal temporal)它调整指定的时间对象以具有与此对象相同的日期和时间。
TZonedDateTime atZoneSameInstant(ZoneId zone)它将此日期时间与时区结合起来创建一个 ZonedDateTime,确保结果具有相同的时刻。
TZonedDateTime atZoneSimilarLocal(ZoneId zone)它将此日期时间与时区结合起来创建一个 ZonedDateTime,尝试保持相同的本地日期和时间。
Tint compareTo(OffsetDateTime other)它将此日期时间与另一个日期时间进行比较。
Tboolean equals(Object obj)它检查此日期时间是否等于另一个日期时间。
TString format(DateTimeFormatter formatter)它使用指定的格式器格式化此日期时间。
Tstatic OffsetDateTime from(TemporalAccessor temporal)它从时间对象获取 OffsetDateTime 的一个实例。
Tint getHour()它获取一天中的小时字段。
Tlong getLong(TemporalField field)它获取指定字段的值,该值来自此日期时间,为 long 类型。
TMonth getMinute()它获取一小时的分钟字段。
TMonth getMonth()它使用 Month 枚举获取年字段。
Tint getMonthValue()它获取从 1 到 12 的年字段。
Tint getNano()它获取秒的纳秒字段。
TZoneOffset getOffset()它获取时区偏移量,例如 '+01:00'。
Tint getSecond()它获取分钟的秒字段。
Tint getYear()它获取年份字段。
Tint hashCode()它返回此日期时间的哈希码。
Tboolean isAfter(OffsetDateTime other)它检查此日期时间是否晚于指定的日期时间。
Tboolean isBefore(OffsetDateTime other)它检查此日期时间是否早于指定的日期时间。
Tboolean isEqual(OffsetDateTime other)它检查此日期时间是否等于指定的日期时间。
Tboolean isSupported(TemporalField field)它检查是否支持指定的字段。
Tboolean isSupported(TemporalUnit unit)它检查是否支持指定的单位。
TOffsetDateTime minus(long amountToSubtract, TemporalUnit unit)它返回此日期时间的副本,减去指定量。
TOffsetDateTime minus(TemporalAmount amountToSubtract)它返回此日期时间的副本,减去指定量。
TOffsetDateTime minusMonths(long monthsToSubtract)它返回此 OffsetDateTime 的一个副本,其中减去了指定的月数。
TOffsetDateTime minusHours(long hoursToSubtract)它返回此 OffsetDateTime 的一个副本,其中减去了指定的小时数。
TOffsetDateTime minusMinutes(long minutesToSubtract)它返回此 OffsetDateTime 的一个副本,其中减去了指定的分钟数。
TOffsetDateTime minusNanos(long nanos)它返回此 OffsetDateTime 的一个副本,其中减去了指定的纳秒数。
Tstatic OffsetDateTime of(LocalDate date, LocalTime time, ZoneOffset offset)它从日期、时间和偏移量获取 OffsetDateTime 的一个实例。
Tstatic OffsetDateTime ofInstant(Instant instant, ZoneId zone)它从 Instant 和时区 ID 获取 OffsetDateTime 的一个实例。
Tstatic OffsetDateTime parse(CharSequence text)它从文本字符串获取 OffsetDateTime 的一个实例,例如 2007-12-03T10:15:30。
TValueRange range(TemporalField field)获取指定字段的有效值的范围。
Tlong toEpochSecond()它将此日期时间转换为自 1970-01-01T00:00:00Z 的 epoch 以来的秒数。
TOffsetDateTime truncatedTo(TemporalUnit unit)它返回此 OffsetDateTime 的一个副本,其中时间被截断。
TOffsetDateTime with(TemporalAdjuster adjuster)它返回此日期时间的一个调整后的副本。

Java OffsetDateTime 类示例:getDayOfMonth()

OffsetDateTimeExample1.java

输出

18

Java OffsetDateTime 类示例:getDayOfYear()

OffsetDateTimeExample2.java

输出

18

Java OffsetDateTime 类示例:getDayOfWeek()

OffsetDateTimeExample3.java

输出

WEDNESDAY

Java OffsetDateTime 类示例:toLocalDate()

OffsetDateTimeExample4.java

输出

2017-01-18

Java OffsetDateTime 类示例:minusDays()

OffsetDateTimeExample5.java

输出

2016-05-23T12:12:31.642+05:30	

Java OffsetDateTime 类示例:plusDays()

OffsetDateTimeExample6.java

输出

2017-09-15T13:50:30.526+05:30

下一个主题Java 时钟