- 所有已实现的接口:
-
Serializable
,Comparable<OffsetDateTime>
,Temporal
,TemporalAccessor
,TemporalAdjuster
2007-12-03T10:15:30+01:00
。
OffsetDateTime
是一个不可变的带有偏移的日期时间表示。该类存储所有日期和时间字段,精确到纳秒,以及与UTC/Greenwich的偏移。例如,值"2007年10月2日13:45:30.123456789 +02:00"可以存储在OffsetDateTime
中。
OffsetDateTime
、ZonedDateTime
和Instant
都以纳秒精度存储时间线上的瞬时。 Instant
是最简单的,只表示瞬时。 OffsetDateTime
在瞬时上添加了与UTC/Greenwich的偏移,这允许获取本地日期时间。 ZonedDateTime
添加了完整的时区规则。
建议在简单应用程序中使用ZonedDateTime
或Instant
来建模数据。当更详细地建模日期时间概念或在与数据库通信或网络协议中使用时,可以使用此类。
这是一个基于值的类;程序员应该将相等的实例视为可互换的,不应将实例用于同步,否则可能会发生不可预测的行为。例如,在将来的版本中,同步可能会失败。应该使用equals
方法进行比较。
- 实现要求:
- 此类是不可变的且线程安全的。
- 自 JDK 版本:
- 1.8
- 参见:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final OffsetDateTime
支持的最大OffsetDateTime
,'+999999999-12-31T23:59:59.999999999-18:00'。static final OffsetDateTime
支持的最小OffsetDateTime
,'-999999999-01-01T00:00:00+18:00'。 -
Method Summary
Modifier and TypeMethodDescriptionadjustInto
(Temporal temporal) 调整指定的时间对象,使其具有与此对象相同的偏移、日期和时间。atZoneSameInstant
(ZoneId zone) 将此日期时间与时区组合,创建一个ZonedDateTime
,确保结果具有相同的瞬时。atZoneSimilarLocal
(ZoneId zone) 将此日期时间与时区组合,创建一个ZonedDateTime
,尝试保持相同的本地日期和时间。int
compareTo
(OffsetDateTime other) 将此日期时间与另一个日期时间进行比较。boolean
检查此日期时间是否等于另一个日期时间。format
(DateTimeFormatter formatter) 使用指定的格式化程序格式化此日期时间。static OffsetDateTime
from
(TemporalAccessor temporal) 从时间对象获取OffsetDateTime
的实例。int
get
(TemporalField field) 从此日期时间中获取指定字段的值作为int
。int
获取月份中的日期字段。获取星期几字段,这是一个枚举DayOfWeek
。int
获取年中的日期字段。int
getHour()
获取一天中的小时字段。long
getLong
(TemporalField field) 从此日期时间中获取指定字段的值作为long
。int
获取小时中的分钟字段。getMonth()
使用Month
枚举获取年中的月份字段。int
获取年中的月份字段,从1到12。int
getNano()
获取秒中的纳秒字段。获取区偏移,例如'+01:00'。int
获取分钟中的秒字段。int
getYear()
获取年份字段。int
hashCode()
此日期时间的哈希码。boolean
isAfter
(OffsetDateTime other) 检查此日期时间的瞬时是否在指定日期时间之后。boolean
isBefore
(OffsetDateTime other) 检查此日期时间的瞬时是否在指定日期时间之前。boolean
isEqual
(OffsetDateTime other) 检查此日期时间的瞬时是否等于指定日期时间的瞬时。boolean
isSupported
(TemporalField field) 检查是否支持指定字段。boolean
isSupported
(TemporalUnit unit) 检查是否支持指定单位。minus
(long amountToSubtract, TemporalUnit unit) 返回减去指定数量后的此日期时间的副本。minus
(TemporalAmount amountToSubtract) 返回减去指定数量后的此日期时间的副本。minusDays
(long days) 返回减去指定天数后的此OffsetDateTime
的副本。minusHours
(long hours) 返回减去指定小时数后的此OffsetDateTime
的副本。minusMinutes
(long minutes) 返回减去指定分钟数后的此OffsetDateTime
的副本。minusMonths
(long months) 返回减去指定月数后的此OffsetDateTime
的副本。minusNanos
(long nanos) 返回减去指定纳秒数后的此OffsetDateTime
的副本。minusSeconds
(long seconds) 返回减去指定秒数后的此OffsetDateTime
的副本。minusWeeks
(long weeks) 返回减去指定周数后的此OffsetDateTime
的副本。minusYears
(long years) 返回减去指定年数后的此OffsetDateTime
的副本。static OffsetDateTime
now()
从默认时区的系统时钟获取当前日期时间。static OffsetDateTime
从指定时钟获取当前日期时间。static OffsetDateTime
从指定时区的系统时钟获取当前日期时间。static OffsetDateTime
of
(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneOffset offset) 从年、月、日、小时、分钟、秒、纳秒和偏移获取OffsetDateTime
的实例。static OffsetDateTime
of
(LocalDate date, LocalTime time, ZoneOffset offset) 从日期、时间和偏移获取OffsetDateTime
的实例。static OffsetDateTime
of
(LocalDateTime dateTime, ZoneOffset offset) 从日期时间和偏移获取OffsetDateTime
的实例。static OffsetDateTime
从Instant
和区域ID获取OffsetDateTime
的实例。static OffsetDateTime
parse
(CharSequence text) 从文本字符串(例如2007-12-03T10:15:30+01:00
)获取OffsetDateTime
的实例。static OffsetDateTime
parse
(CharSequence text, DateTimeFormatter formatter) 使用特定格式化程序从文本字符串获取OffsetDateTime
的实例。plus
(long amountToAdd, TemporalUnit unit) 返回添加指定数量后的此日期时间的副本。plus
(TemporalAmount amountToAdd) 返回添加指定数量后的此日期时间的副本。plusDays
(long days) 返回添加指定天数后的此OffsetDateTime
的副本。plusHours
(long hours) 返回添加指定小时数后的此OffsetDateTime
的副本。plusMinutes
(long minutes) 返回添加指定分钟数后的此OffsetDateTime
的副本。plusMonths
(long months) 返回添加指定月数后的此OffsetDateTime
的副本。plusNanos
(long nanos) 返回添加指定纳秒数后的此OffsetDateTime
的副本。plusSeconds
(long seconds) 返回添加指定秒数后的此OffsetDateTime
的副本。plusWeeks
(long weeks) 返回添加指定周数后的此OffsetDateTime
的副本。plusYears
(long years) 返回添加指定年数后的此OffsetDateTime
的副本。<R> R
query
(TemporalQuery<R> query) 使用指定查询查询此日期时间。range
(TemporalField field) 获取指定字段的有效值范围。static Comparator
<OffsetDateTime> 获取一个比较器,仅基于瞬时比较两个OffsetDateTime
实例。long
将此日期时间转换为从1970-01-01T00:00:00Z时期的秒数。将此日期时间转换为Instant
。获取此日期时间的LocalDate
部分。获取此日期时间的LocalDateTime
部分。获取此日期时间的LocalTime
部分。将此日期时间转换为OffsetTime
。toString()
将此日期时间输出为String
,例如2007-12-03T10:15:30+01:00
。使用偏移作为区域ID将此日期时间转换为ZonedDateTime
的副本。truncatedTo
(TemporalUnit unit) 返回此OffsetDateTime
的副本,时间被截断。long
until
(Temporal endExclusive, TemporalUnit unit) 计算到另一个日期时间的时间量,以指定单位表示。with
(TemporalAdjuster adjuster) 返回调整后的此日期时间的副本。with
(TemporalField field, long newValue) 返回将指定字段设置为新值后的此日期时间的副本。withDayOfMonth
(int dayOfMonth) 返回将日期月份设置为新值后的此OffsetDateTime
的副本。withDayOfYear
(int dayOfYear) 返回将年中日期设置为新值后的此OffsetDateTime
的副本。withHour
(int hour) 返回将小时设置为新值后的此OffsetDateTime
的副本。withMinute
(int minute) 返回将分钟设置为新值后的此OffsetDateTime
的副本。withMonth
(int month) 返回将年中月份设置为新值后的此OffsetDateTime
的副本。withNano
(int nanoOfSecond) 返回将纳秒设置为新值后的此OffsetDateTime
的副本。withOffsetSameInstant
(ZoneOffset offset) 返回将指定偏移后确保结果为相同瞬时的此OffsetDateTime
的副本。withOffsetSameLocal
(ZoneOffset offset) 返回将指定偏移后确保结果具有相同本地日期时间的此OffsetDateTime
的副本。withSecond
(int second) 返回将秒设置为新值后的此OffsetDateTime
的副本。withYear
(int year) 返回将年设置为新值后的此OffsetDateTime
的副本。
-
Field Details
-
MIN
支持的最小OffsetDateTime
,'-999999999-01-01T00:00:00+18:00'。这是最大偏移的最小日期时间(较大的偏移在时间线上更早)。这结合了LocalDateTime.MIN
和ZoneOffset.MAX
。应用程序可以将其用作“遥远过去”的日期时间。 -
MAX
最大支持的OffsetDateTime
,'+999999999-12-31T23:59:59.999999999-18:00'。这是在最小偏移量的最大日期结束之前的本地日期时间(更大的负偏移量在时间线上更晚)。这结合了LocalDateTime.MAX
和ZoneOffset.MIN
。这可以被应用程序用作“遥远的未来”日期时间。
-
-
Method Details
-
timeLineOrder
获取一个比较器,仅基于瞬时比较两个OffsetDateTime
实例。此方法与
compareTo(java.time.OffsetDateTime)
中的比较不同,因为它仅比较基础瞬时。- 返回:
- 一个按时间线顺序比较的比较器
- 参见:
-
now
从系统时钟中获取默认时区的当前日期时间。这将查询默认时区中的
系统时钟
以获取当前日期时间。偏移量将根据时钟中的时区计算。使用此方法将阻止使用替代时钟进行测试的能力,因为时钟是硬编码的。
- 返回:
- 使用系统时钟的当前日期时间,非空
-
now
从指定时区的系统时钟中获取当前日期时间。这将查询
系统时钟
以获取当前日期时间。指定时区可避免依赖默认时区。偏移量将根据指定的时区计算。使用此方法将阻止使用替代时钟进行测试的能力,因为时钟是硬编码的。
- 参数:
-
zone
- 要使用的区域ID,非空 - 返回:
- 使用系统时钟的当前日期时间,非空
-
now
从指定时钟获取当前日期时间。这将查询指定的时钟以获取当前日期时间。偏移量将根据时钟中的时区计算。
使用此方法允许使用替代时钟进行测试。可以通过
依赖注入
引入替代时钟。- 参数:
-
clock
- 要使用的时钟,非空 - 返回:
- 当前日期时间,非空
-
of
从日期、时间和偏移量获取OffsetDateTime
的实例。这将使用指定的本地日期、时间和偏移量创建一个偏移日期时间。
- 参数:
-
date
- 本地日期,非空 -
time
- 本地时间,非空 -
offset
- 区域偏移量,非空 - 返回:
- 偏移日期时间,非空
-
of
从日期时间和偏移量获取OffsetDateTime
的实例。这将使用指定的本地日期时间和偏移量创建一个偏移日期时间。
- 参数:
-
dateTime
- 本地日期时间,非空 -
offset
- 区域偏移量,非空 - 返回:
- 偏移日期时间,非空
-
of
public static OffsetDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneOffset offset) 从年、月、日、小时、分钟、秒、纳秒和偏移量获取OffsetDateTime
的实例。这将使用七个指定字段创建一个偏移日期时间。
此方法主要用于编写测试用例。非测试代码通常会使用其他方法来创建偏移时间。
LocalDateTime
具有五个等效工厂方法的便利变体,接受较少的参数。这里不提供它们以减少API的占用空间。- 参数:
-
year
- 要表示的年份,从MIN_YEAR到MAX_YEAR -
month
- 要表示的年份,从1(一月)到12(十二月) -
dayOfMonth
- 要表示的月份中的日期,从1到31 -
hour
- 要表示的小时,从0到23 -
minute
- 要表示的小时中的分钟,从0到59 -
second
- 要表示的分钟中的秒,从0到59 -
nanoOfSecond
- 要表示的秒中的纳秒,从0到999,999,999 -
offset
- 区域偏移量,非空 - 返回:
- 偏移日期时间,非空
- 抛出:
-
DateTimeException
- 如果任何字段的值超出范围,或者日期无效
-
ofInstant
从Instant
和区域ID获取OffsetDateTime
的实例。这将创建一个与指定瞬时相同的偏移日期时间。从UTC/Greenwich找到偏移量很简单,因为每个瞬时只有一个有效的偏移量。
- 参数:
-
instant
- 要从中创建日期时间的瞬时,非空 -
zone
- 时区,可以是偏移量,非空 - 返回:
- 偏移日期时间,非空
- 抛出:
-
DateTimeException
- 如果结果超出支持的范围
-
from
从时间对象获取OffsetDateTime
的实例。这基于指定的时间对象获取一个偏移日期时间。
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为OffsetDateTime
的实例。转换将首先从时间对象获取
ZoneOffset
。然后尝试获取LocalDateTime
,必要时回退到Instant
。结果将是ZoneOffset
与LocalDateTime
或Instant
的组合。实现允许执行优化,例如访问等效于相关对象的字段。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用OffsetDateTime::from
将其用作查询。- 参数:
-
temporal
- 要转换的时间对象,非空 - 返回:
- 偏移日期时间,非空
- 抛出:
-
DateTimeException
- 如果无法转换为OffsetDateTime
-
parse
从文本字符串(例如2007-12-03T10:15:30+01:00
)获取OffsetDateTime
的实例。字符串必须表示有效的日期时间,并使用
DateTimeFormatter.ISO_OFFSET_DATE_TIME
进行解析。- 参数:
-
text
- 要解析的文本,例如"2007-12-03T10:15:30+01:00",非空 - 返回:
- 解析的偏移日期时间,非空
- 抛出:
-
DateTimeParseException
- 如果无法解析文本
-
parse
使用特定格式化程序从文本字符串获取OffsetDateTime
的实例。使用格式化程序解析文本,返回一个日期时间。
- 参数:
-
text
- 要解析的文本,非空 -
formatter
- 要使用的格式化程序,非空 - 返回:
- 解析的偏移日期时间,非空
- 抛出:
-
DateTimeParseException
- 如果无法解析文本
-
isSupported
检查是否支持指定字段。这将检查此日期时间是否可以查询指定字段。如果为false,则调用
range
、get
和with(TemporalField, long)
方法将抛出异常。如果字段是一个
ChronoField
,则在此处实现查询。支持的字段包括:NANO_OF_SECOND
NANO_OF_DAY
MICRO_OF_SECOND
MICRO_OF_DAY
MILLI_OF_SECOND
MILLI_OF_DAY
SECOND_OF_MINUTE
SECOND_OF_DAY
MINUTE_OF_HOUR
MINUTE_OF_DAY
HOUR_OF_AMPM
CLOCK_HOUR_OF_AMPM
HOUR_OF_DAY
CLOCK_HOUR_OF_DAY
AMPM_OF_DAY
DAY_OF_WEEK
ALIGNED_DAY_OF_WEEK_IN_MONTH
ALIGNED_DAY_OF_WEEK_IN_YEAR
DAY_OF_MONTH
DAY_OF_YEAR
EPOCH_DAY
ALIGNED_WEEK_OF_MONTH
ALIGNED_WEEK_OF_YEAR
MONTH_OF_YEAR
PROLEPTIC_MONTH
YEAR_OF_ERA
YEAR
ERA
INSTANT_SECONDS
OFFSET_SECONDS
ChronoField
实例将返回false。如果字段不是
ChronoField
,则通过调用TemporalField.isSupportedBy(TemporalAccessor)
传递this
作为参数来获取此方法的结果。字段是否受支持由字段确定。- 指定者:
-
isSupported
在接口TemporalAccessor
中 - 参数:
-
field
- 要检查的字段,null返回false - 返回:
- 如果此日期时间支持该字段,则为true,否则为false
-
isSupported
检查指定的单位是否受支持。这将检查指定的单位是否可以添加到此日期时间或从中减去。如果为false,则调用
plus(long, TemporalUnit)
和minus
方法将抛出异常。如果单位是一个
ChronoUnit
,则在此处实现查询。支持的单位包括:NANOS
MICROS
MILLIS
SECONDS
MINUTES
HOURS
HALF_DAYS
DAYS
WEEKS
MONTHS
YEARS
DECADES
CENTURIES
MILLENNIA
ERAS
ChronoUnit
实例将返回false。如果单位不是
ChronoUnit
,则通过调用TemporalUnit.isSupportedBy(Temporal)
并将this
作为参数传递来获取此方法的结果。单位是否受支持由单位决定。- 指定者:
-
isSupported
在接口Temporal
中 - 参数:
-
unit
- 要检查的单位,null返回false - 返回:
- 如果可以添加/减去单位,则为true,否则为false
-
range
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。此日期时间用于增强返回的范围的准确性。如果无法返回范围,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。支持的字段
将返回适当的范围实例。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
异常。如果字段不是
ChronoField
,则通过调用TemporalField.rangeRefinedBy(TemporalAccessor)
并将this
作为参数传递来获取此方法的结果。是否可以获取范围由字段决定。- 指定者:
-
range
在接口TemporalAccessor
中 - 参数:
-
field
- 要查询范围的字段,不能为空 - 返回:
- 字段的有效值范围,不能为空
- 抛出:
-
DateTimeException
- 如果无法获取字段的范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段
-
get
获取此日期时间的指定字段的值作为int
。查询此日期时间以获取指定字段的值。返回的值将始终在字段的有效值范围内。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。支持的字段
将根据此日期时间返回基于有效值的值,除了NANO_OF_DAY
、MICRO_OF_DAY
、EPOCH_DAY
、PROLEPTIC_MONTH
和INSTANT_SECONDS
,它们太大而无法适应int
并抛出UnsupportedTemporalTypeException
异常。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
异常。如果字段不是
ChronoField
,则通过调用TemporalField.getFrom(TemporalAccessor)
并将this
作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段决定。- 指定者:
-
get
在接口TemporalAccessor
中 - 参数:
-
field
- 要获取的字段,不能为空 - 返回:
- 字段的值
- 抛出:
-
DateTimeException
- 如果无法获取字段的值或值超出字段的有效值范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段或值的范围超过int
-
ArithmeticException
- 如果发生数值溢出
-
getLong
获取此日期时间的指定字段的值作为long
。查询此日期时间以获取指定字段的值。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。支持的字段
将根据此日期时间返回有效值。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
异常。如果字段不是
ChronoField
,则通过调用TemporalField.getFrom(TemporalAccessor)
并将this
作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段决定。- 指定者:
-
getLong
在接口TemporalAccessor
中 - 参数:
-
field
- 要获取的字段,不能为空 - 返回:
- 字段的值
- 抛出:
-
DateTimeException
- 如果无法获取字段的值 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数值溢出
-
getOffset
获取区域偏移,例如'+01:00'。这是本地日期时间与UTC/Greenwich之间的偏移量。
- 返回:
- 区域偏移,不能为空
-
withOffsetSameLocal
返回具有指定偏移的此OffsetDateTime
的副本,确保结果具有相同的本地日期时间。此方法返回一个具有相同
LocalDateTime
和指定ZoneOffset
的对象。不需要或执行任何计算。例如,如果此时间表示2007-12-03T10:30+02:00
,指定的偏移量为+03:00
,则此方法将返回2007-12-03T10:30+03:00
。要考虑偏移量之间的差异,并调整时间字段,请使用
withOffsetSameInstant(java.time.ZoneOffset)
。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
offset
- 要更改为的区域偏移,不能为空 - 返回:
-
基于此日期时间的具有请求偏移的
OffsetDateTime
,不能为空
-
withOffsetSameInstant
返回具有指定偏移的此OffsetDateTime
的副本,确保结果处于相同的时刻。此方法返回一个具有指定
ZoneOffset
和通过两个偏移量之间的差异调整的LocalDateTime
的对象。这将导致旧对象和新对象表示相同的时刻。这对于在不同偏移量中查找本地时间很有用。例如,如果此时间表示2007-12-03T10:30+02:00
,指定的偏移量为+03:00
,则此方法将返回2007-12-03T11:30+03:00
。要更改偏移量而不调整本地时间,请使用
withOffsetSameLocal(java.time.ZoneOffset)
。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
offset
- 要更改为的区域偏移,不能为空 - 返回:
-
基于此日期时间的具有请求偏移的
OffsetDateTime
,不能为空 - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
toLocalDateTime
获取此日期时间的LocalDateTime
部分。这将返回一个具有与此日期时间相同的年、月、日和时间的
LocalDateTime
。- 返回:
- 此日期时间的本地日期时间部分,不能为空
-
toLocalDate
获取此日期时间的LocalDate
部分。这将返回一个具有与此日期时间相同的年、月和日的
LocalDate
。- 返回:
- 此日期时间的日期部分,不为null
-
getYear
public int getYear()获取年份字段。此方法返回年份的原始
int
值。此方法返回的年份是根据
get(YEAR)
的规则。要获取年代年份,请使用get(YEAR_OF_ERA)
。- 返回:
- 年份,从MIN_YEAR到MAX_YEAR
-
getMonthValue
public int getMonthValue()获取月份字段,从1到12。此方法将月份作为1到12的
int
返回。如果应用程序代码使用枚举Month
调用getMonth()
,通常更清晰。- 返回:
- 月份,从1到12
- 参见:
-
getMonth
- 返回:
- 月份,不为null
- 参见:
-
getDayOfMonth
public int getDayOfMonth()获取日期中的日字段。此方法返回日期中日的原始
int
值。- 返回:
- 日,从1到31
-
getDayOfYear
public int getDayOfYear()获取年份中的日字段。此方法返回年份中日的原始
int
值。- 返回:
- 日,从1到365,闰年为366
-
getDayOfWeek
获取星期几字段,这是一个枚举DayOfWeek
。此方法返回星期几的枚举
DayOfWeek
。这样可以避免混淆int
值的含义。如果需要访问原始int
值,则枚举提供了int值
。可以从
DayOfWeek
获取其他信息。这包括值的文本名称。- 返回:
- 星期几,不为null
-
toLocalTime
获取此日期时间的LocalTime
部分。返回一个具有与此日期时间相同的小时、分钟、秒和纳秒的
LocalTime
。- 返回:
- 此日期时间的时间部分,不为null
-
getHour
public int getHour()获取小时字段。- 返回:
- 小时,从0到23
-
getMinute
public int getMinute()获取分钟字段。- 返回:
- 分钟,从0到59
-
getSecond
public int getSecond()获取秒字段。- 返回:
- 秒,从0到59
-
getNano
public int getNano()获取纳秒字段。- 返回:
- 纳秒,从0到999,999,999
-
with
返回此日期时间的调整副本。返回一个基于此日期时间的
OffsetDateTime
,并进行调整。使用指定的调整策略对象进行调整。阅读调整器的文档以了解将进行的调整。简单的调整器可能只是设置字段之一,例如年份字段。更复杂的调整器可能将日期设置为该月的最后一天。提供了一些常见的调整选项在
TemporalAdjusters
中。这些包括查找“月底”和“下周三”。关键的日期时间类还实现了TemporalAdjuster
接口,例如Month
和MonthDay
。调整器负责处理特殊情况,例如月份的长度和闰年。例如,此代码返回七月的最后一天的日期:
import static java.time.Month.*; import static java.time.temporal.TemporalAdjusters.*; result = offsetDateTime.with(JULY).with(lastDayOfMonth());
类
LocalDate
、LocalTime
和ZoneOffset
实现了TemporalAdjuster
,因此此方法可用于更改日期、时间或偏移量:result = offsetDateTime.with(date); result = offsetDateTime.with(time); result = offsetDateTime.with(offset);
此方法的结果是通过在指定的调整器上调用
TemporalAdjuster.adjustInto(Temporal)
方法并将this
作为参数传递来获得的。此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
with
在接口Temporal
中 - 参数:
-
adjuster
- 要使用的调整器,不为null - 返回:
-
基于
this
进行调整的OffsetDateTime
,不为null - 抛出:
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数值溢出
-
with
返回此日期时间的副本,并将指定字段设置为新值。返回一个基于此日期时间的
OffsetDateTime
,并更改指定字段的值。这可用于更改任何支持的字段,例如年、月或日。如果无法设置值,因为不支持该字段或出于其他原因,将抛出异常。在某些情况下,更改指定字段可能导致结果日期时间无效,例如将月份从1月31日更改为2月会使日期无效。在这种情况下,字段负责解析日期。通常它会选择前一个有效日期,例如在此示例中为2月的最后一个有效日期。
如果字段是一个
ChronoField
,则在此处实现调整。INSTANT_SECONDS
字段将返回具有指定时刻的日期时间。偏移量和纳秒不变。如果新的时刻值超出有效范围,则将抛出DateTimeException
。OFFSET_SECONDS
字段将返回具有指定偏移量的日期时间。本地日期时间不变。如果新的偏移值超出有效范围,则将抛出DateTimeException
。其他
支持的字段
将按照LocalDateTime
上的匹配方法的行为。在这种情况下,偏移量不参与计算,将保持不变。所有其他
ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过调用TemporalField.adjustInto(Temporal, long)
方法并将this
作为参数传递来获得此方法的结果。在这种情况下,字段确定是否以及如何调整时刻。此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
with
在接口Temporal
中 - 参数:
-
field
- 要在结果中设置的字段,不为null -
newValue
- 结果中字段的新值 - 返回:
-
基于
this
进行设置指定字段的OffsetDateTime
,不为null - 抛出:
-
DateTimeException
- 如果无法设置字段 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数值溢出
-
withYear
返回将年份更改后的OffsetDateTime
的副本。时间和偏移量不影响计算,并且在结果中将保持不变。如果日期中的日无效,则会更改为该月的最后一个有效日期。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
year
- 要在结果中设置的年份,从MIN_YEAR到MAX_YEAR - 返回:
-
基于此日期时间的
OffsetDateTime
,具有请求的年份,不为null - 抛出:
-
DateTimeException
- 如果年份值无效
-
withMonth
返回将月份更改后的OffsetDateTime
的副本。时间和偏移量不影响计算,并且在结果中将保持不变。如果日期中的日无效,则会更改为该月的最后一个有效日期。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
month
- 要在结果中设置的月份,从1(一月)到12(十二月) - 返回:
-
基于此日期时间的
OffsetDateTime
,具有请求的月份,不为null - 抛出:
-
DateTimeException
- 如果月份值无效
-
withDayOfMonth
返回修改了月份的OffsetDateTime
的副本。如果结果的
OffsetDateTime
无效,则会抛出异常。时间和偏移量不影响计算,并且在结果中将保持不变。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
dayOfMonth
- 要设置为结果中的日期,从1到28-31 - 返回:
-
基于此日期时间的
OffsetDateTime
,具有请求的日期,不为null - 抛出:
-
DateTimeException
- 如果日期值无效,或者日期值对于月份-年份无效
-
withDayOfYear
返回修改了年份的OffsetDateTime
的副本。时间和偏移量不影响计算,并且在结果中将保持不变。如果结果的
OffsetDateTime
无效,则会抛出异常。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
dayOfYear
- 要设置为结果中的年份,从1到365-366 - 返回:
-
基于此日期的
OffsetDateTime
,具有请求的日期,不为null - 抛出:
-
DateTimeException
- 如果年份值无效,或者年份对于该年份无效
-
withHour
返回修改了小时的OffsetDateTime
的副本。日期和偏移量不影响计算,并且在结果中将保持不变。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
hour
- 要设置为结果中的小时,从0到23 - 返回:
-
基于此日期时间的
OffsetDateTime
,具有请求的小时,不为null - 抛出:
-
DateTimeException
- 如果小时值无效
-
withMinute
返回修改了分钟的OffsetDateTime
的副本。日期和偏移量不影响计算,并且在结果中将保持不变。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
minute
- 要设置为结果中的分钟,从0到59 - 返回:
-
基于此日期时间的
OffsetDateTime
,具有请求的分钟,不为null - 抛出:
-
DateTimeException
- 如果分钟值无效
-
withSecond
返回修改了秒数的OffsetDateTime
的副本。日期和偏移量不影响计算,并且在结果中将保持不变。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
second
- 要设置为结果中的秒数,从0到59 - 返回:
-
基于此日期时间的
OffsetDateTime
,具有请求的秒数,不为null - 抛出:
-
DateTimeException
- 如果秒数值无效
-
withNano
返回修改了纳秒数的OffsetDateTime
的副本。日期和偏移量不影响计算,并且在结果中将保持不变。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
nanoOfSecond
- 要设置为结果中的纳秒数,从0到999,999,999 - 返回:
-
基于此日期时间的
OffsetDateTime
,具有请求的纳秒数,不为null - 抛出:
-
DateTimeException
- 如果纳秒值无效
-
truncatedTo
返回截断时间后的OffsetDateTime
的副本。截断返回原始日期时间的副本,其中小于指定单位的字段设置为零。例如,使用
minutes
单位进行截断将会将秒数和纳秒数字段设置为零。单位必须具有可被标准日期整除的
duration
,不得有余数。这包括所有提供的时间单位在ChronoUnit
和DAYS
上。其他单位会抛出异常。偏移量不影响计算,并且在结果中将保持不变。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
unit
- 要截断到的单位,不为null - 返回:
-
基于此日期时间的
OffsetDateTime
,具有截断后的时间,不为null - 抛出:
-
DateTimeException
- 如果无法截断 -
UnsupportedTemporalTypeException
- 如果单位不受支持
-
plus
返回添加了指定数量的副本的日期时间。这将返回一个
OffsetDateTime
,基于此日期时间,添加了指定的数量。该数量通常是Period
或Duration
,但也可以是实现TemporalAmount
接口的任何其他类型。通过调用
TemporalAmount.addTo(Temporal)
将计算委托给数量对象。数量的实现可以以任何希望的方式实现添加,但通常会回调plus(long, TemporalUnit)
。请查阅数量实现的文档,以确定是否可以成功添加。此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
plus
在接口Temporal
- 参数:
-
amountToAdd
- 要添加的数量,不为null - 返回:
-
基于此日期时间的
OffsetDateTime
,具有所做的添加,不为null - 抛出:
-
DateTimeException
- 如果无法进行添加 -
ArithmeticException
- 如果发生数值溢出
-
plus
返回添加了指定数量的副本的日期时间。这将返回一个
OffsetDateTime
,基于此日期时间,以单位的形式添加了数量。如果无法添加数量,因为单位不受支持或出于其他原因,则会抛出异常。如果字段是
ChronoUnit
,则通过LocalDateTime.plus(long, TemporalUnit)
实现添加。偏移量不是计算的一部分,并且在结果中将保持不变。如果字段不是
ChronoUnit
,则通过调用TemporalUnit.addTo(Temporal, long)
来获取此方法的结果,传递this
作为参数。在这种情况下,单位确定是否以及如何执行添加。此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
plus
在接口Temporal
- 参数:
-
amountToAdd
- 要添加到结果的单位的数量,可以为负数 -
unit
- 要添加的数量的单位,不为null - 返回:
-
基于此日期时间的
OffsetDateTime
,具有添加了指定数量的单位,不为null - 抛出:
-
DateTimeException
- 如果无法进行添加 -
UnsupportedTemporalTypeException
- 如果单位不受支持 -
ArithmeticException
- 如果发生数值溢出
-
plusYears
返回添加了指定年数的OffsetDateTime
的副本。此方法通过三个步骤将指定的年数添加到年份字段中:
- 将输入年份添加到年份字段
- 检查结果日期是否无效
- 如有必要,调整日期的日期为最后一个有效日期
例如,2008-02-29(闰年)加一年将导致无效日期2009-02-29(标准年)。而不是返回无效结果,将选择该月的最后一个有效日期,即2009-02-28。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
years
- 要添加的年数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,具有添加了年数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusMonths
返回添加指定月份数后的此OffsetDateTime
的副本。此方法通过三个步骤将指定的数量添加到月份字段中:
- 将输入的月份添加到年份字段
- 检查结果日期是否无效
- 如有必要,调整日期的天数为最后一个有效日期
例如,2007-03-31 加一个月将导致无效日期 2007-04-31。而不是返回无效结果,选择该月的最后一个有效日期,即 2007-04-30。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
months
- 要添加的月份数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,添加了月份,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusWeeks
返回添加指定周数后的此OffsetDateTime的副本。此方法将指定的周数添加到天数字段中,根据需要递增月份和年份字段,以确保结果保持有效。只有在超出最大/最小年份时,结果才无效。
例如,2008-12-31 加一周将导致 2009-01-07。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
weeks
- 要添加的周数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,添加了周数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusDays
返回添加指定天数后的此OffsetDateTime的副本。此方法将指定的天数添加到天数字段中,根据需要递增月份和年份字段,以确保结果保持有效。只有在超出最大/最小年份时,结果才无效。
例如,2008-12-31 加一天将导致 2009-01-01。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
days
- 要添加的天数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,添加了天数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusHours
返回添加指定小时数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
hours
- 要添加的小时数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,添加了小时数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusMinutes
返回添加指定分钟数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
minutes
- 要添加的分钟数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,添加了分钟数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusSeconds
返回添加指定秒数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
seconds
- 要添加的秒数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,添加了秒数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
plusNanos
返回添加指定纳秒数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
nanos
- 要添加的纳秒数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,添加了纳秒数,不为null - 抛出:
-
DateTimeException
- 如果无法将单位添加到此类型
-
minus
返回减去指定数量后的此日期时间的副本。返回一个
OffsetDateTime
,基于此日期时间,减去指定的数量。该数量通常是Period
或Duration
,但也可以是实现TemporalAmount
接口的任何其他类型。通过调用
TemporalAmount.subtractFrom(Temporal)
将计算委托给数量对象。数量的实现可以以任何希望的方式实现减法,但通常会回调minus(long, TemporalUnit)
。请参阅数量实现的文档,以确定是否可以成功执行减法。此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
minus
在接口Temporal
- 参数:
-
amountToSubtract
- 要减去的数量,不为null - 返回:
-
基于此日期时间的
OffsetDateTime
,进行了减法操作,不为null - 抛出:
-
DateTimeException
- 如果无法进行减法操作 -
ArithmeticException
- 如果发生数值溢出
-
minus
返回减去指定数量后的此日期时间的副本。返回一个
OffsetDateTime
,基于此日期时间,减去单位的数量。如果无法减去数量,因为不支持该单位或出于其他原因,则会抛出异常。此方法等效于
plus(long, TemporalUnit)
,其数量为负数。有关加法和减法的工作原理的完整描述,请参阅该方法。此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
minus
在接口Temporal
- 参数:
-
amountToSubtract
- 要从结果中减去的单位数量,可以为负数 -
unit
- 要减去的单位,不为null - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了指定的数量,不为null - 抛出:
-
DateTimeException
- 如果无法进行减法操作 -
UnsupportedTemporalTypeException
- 如果不支持该单位 -
ArithmeticException
- 如果发生数值溢出
-
minusYears
返回减去指定年数后的此OffsetDateTime
的副本。此方法通过三个步骤从年份字段中减去指定的数量:
- 从年份字段中减去输入的年数
- 检查结果日期是否无效
- 如有必要,调整日期的天数为最后一个有效日期
例如,2008-02-29(闰年)减去一年将导致无效日期 2007-02-29(标准年)。而不是返回无效结果,选择该月的最后一个有效日期,即 2007-02-28。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
years
- 要减去的年数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了年数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusMonths
返回减去指定月份数后的此OffsetDateTime
的副本。此方法通过三个步骤从月份字段中减去指定的数量:
- 从年份字段中减去输入的月份
- 检查结果日期是否无效
- 如有必要,调整日期的天数为最后一个有效日期
例如,2007-03-31 减去一个月将导致无效日期 2007-02-31。而不是返回无效结果,选择该月的最后一个有效日期,即 2007-02-28。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
months
- 要减去的月份数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了月份数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusWeeks
返回减去指定周数后的此OffsetDateTime
的副本。此方法从天数字段中减去指定的周数,必要时递减月份和年份字段,以确保结果保持有效。仅当超出最大/最小年份时,结果才无效。
例如,从2009-01-07减去一周将得到2008-12-31。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
weeks
- 要减去的周数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了周数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusDays
返回减去指定天数后的此OffsetDateTime
的副本。此方法从天数字段中减去指定的数量,必要时递减月份和年份字段,以确保结果保持有效。仅当超出最大/最小年份时,结果才无效。
例如,从2009-01-01减去一天将得到2008-12-31。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
days
- 要减去的天数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了天数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusHours
返回减去指定小时数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
hours
- 要减去的小时数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了小时数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusMinutes
返回减去指定分钟数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
minutes
- 要减去的分钟数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了分钟数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusSeconds
返回减去指定秒数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
seconds
- 要减去的秒数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了秒数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
minusNanos
返回减去指定纳秒数后的此OffsetDateTime
的副本。此实例是不可变的,不受此方法调用的影响。
- 参数:
-
nanos
- 要减去的纳秒数,可以为负数 - 返回:
-
基于此日期时间的
OffsetDateTime
,减去了纳秒数,不为null - 抛出:
-
DateTimeException
- 如果结果超出支持的日期范围
-
query
使用指定的查询查询此日期时间。使用指定的查询策略对象查询此日期时间。
TemporalQuery
对象定义了用于获取结果的逻辑。阅读查询的文档以了解此方法的结果。此方法的结果是通过在指定的查询上调用
TemporalQuery.queryFrom(TemporalAccessor)
方法,将this
作为参数传递而获得的。- 指定者:
-
query
在接口TemporalAccessor
- 类型参数:
-
R
- 结果的类型 - 参数:
-
query
- 要调用的查询,不为null - 返回:
- 查询结果,可能返回null(由查询定义)
- 抛出:
-
DateTimeException
- 如果无法查询(由查询定义) -
ArithmeticException
- 如果发生数值溢出(由查询定义)
-
adjustInto
调整指定的时间对象,使其具有与此对象相同的偏移量、日期和时间。返回一个与输入的可观察类型相同的时间对象,偏移量、日期和时间被更改为与此相同。
此调整等同于使用
Temporal.with(TemporalField, long)
三次,传递ChronoField.EPOCH_DAY
、ChronoField.NANO_OF_DAY
和ChronoField.OFFSET_SECONDS
作为字段。在大多数情况下,使用
Temporal.with(TemporalAdjuster)
来反转调用模式更清晰:// 这两行是等价的,但建议使用第二种方法 temporal = thisOffsetDateTime.adjustInto(temporal); temporal = temporal.with(thisOffsetDateTime);
此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
adjustInto
在接口TemporalAdjuster
- 参数:
-
temporal
- 要调整的目标对象,不为null - 返回:
- 调整后的对象,不为null
- 抛出:
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数值溢出
-
until
根据指定单位计算到另一个日期时间的时间量。这将根据单个
TemporalUnit
计算两个OffsetDateTime
对象之间的时间量。起始点和结束点分别为this
和指定的日期时间。如果结束在开始之前,则结果将为负数。例如,可以使用startDateTime.until(endDateTime, DAYS)
来计算两个日期时间之间的天数。传递给此方法的
Temporal
将使用from(TemporalAccessor)
转换为OffsetDateTime
。如果两个日期时间之间的偏移量不同,则规范化指定的结束日期时间以具有与此日期时间相同的偏移量。计算返回一个整数,表示两个日期时间之间的完整单位数。例如,在2012-06-15T00:00Z和2012-08-14T23:59Z之间的月数只有一个月,因为它比两个月短一分钟。
有两种等效的使用此方法的方式。第一种是调用此方法。第二种是使用
TemporalUnit.between(Temporal, Temporal)
:// 这两行是等价的 amount = start.until(end, MONTHS); amount = MONTHS.between(start, end);
应根据哪种方式使代码更易读来进行选择。此方法为
ChronoUnit
实现了计算。支持单位NANOS
、MICROS
、MILLIS
、SECONDS
、MINUTES
、HOURS
和HALF_DAYS
、DAYS
、WEEKS
、MONTHS
、YEARS
、DECADES
、CENTURIES
、MILLENNIA
和ERAS
。其他ChronoUnit
值将抛出异常。如果单位不是
ChronoUnit
,则通过调用TemporalUnit.between(Temporal, Temporal)
获得此方法的结果,将this
作为第一个参数传递,将转换的输入时间作为第二个参数传递。此实例是不可变的,不受此方法调用的影响。
- 指定者:
-
until
在接口Temporal
- 参数:
-
endExclusive
- 结束日期(不包括),将其转换为OffsetDateTime
,不为null -
unit
- 用于测量时间量的单位,不为null - 返回:
- 此日期时间与结束日期时间之间的时间量
- 抛出:
-
DateTimeException
- 如果无法计算时间量,或无法将结束时间转换为OffsetDateTime
-
UnsupportedTemporalTypeException
- 如果不支持该单位 -
ArithmeticException
- 如果发生数值溢出
-
format
使用指定的格式化程序格式化此日期时间。将传递此日期时间给格式化程序以生成一个字符串。
- 参数:
-
formatter
- 要使用的格式化程序,不能为空 - 返回:
- 格式化后的日期时间字符串,不能为空
- 抛出:
-
DateTimeException
- 如果在打印过程中发生错误
-
atZoneSameInstant
将此日期时间与时区组合,创建一个ZonedDateTime
,确保结果具有相同的时刻。返回一个由此日期时间和指定时区形成的
ZonedDateTime
。此转换将忽略可见的本地日期时间,而使用基础时刻。这避免了本地时间线间隙或重叠的任何问题。结果可能对诸如小时、分钟甚至日期等字段具有不同的值。要尝试保留字段的值,请使用
atZoneSimilarLocal(ZoneId)
。要使用偏移作为区域标识,请使用toZonedDateTime()
。- 参数:
-
zone
- 要使用的时区,不能为空 - 返回:
- 由此日期时间和指定时区形成的带时区的日期时间,不能为空
-
atZoneSimilarLocal
将此日期时间与时区组合,创建一个ZonedDateTime
,尝试保持相同的本地日期和时间。返回一个由此日期时间和指定时区形成的
ZonedDateTime
。在可能的情况下,结果将具有与此对象相同的本地日期时间。时区规则,如夏令时,意味着本地时间线上并非每个时间都存在。如果根据规则本地日期时间处于间隙或重叠中,则使用解析器来确定结果的本地时间和偏移量。此方法使用
ZonedDateTime.ofLocal(LocalDateTime, ZoneId, ZoneOffset)
,以尽可能保留此实例的偏移量。有两种方法可以更精细地控制间隙和重叠。如果您只想在重叠时使用较晚的偏移量,则在此方法之后立即调用
ZonedDateTime.withLaterOffsetAtOverlap()
。要创建一个在本地时间线上相同时刻的带时区的日期时间,请使用
atZoneSameInstant(ZoneId)
。要使用偏移作为区域标识,请使用toZonedDateTime()
。- 参数:
-
zone
- 要使用的时区,不能为空 - 返回:
- 由此日期和时区的最早有效时间形成的带时区的日期时间,不能为空
-
toOffsetTime
将此日期时间转换为OffsetTime
。返回一个具有相同本地时间和偏移量的偏移时间。
- 返回:
- 表示时间和偏移量的OffsetTime,不能为空
-
toZonedDateTime
使用偏移作为区域标识,将此日期时间转换为ZonedDateTime
。使用偏移作为区域标识创建最简单的
ZonedDateTime
。要控制使用的时区,请参见
atZoneSameInstant(ZoneId)
和atZoneSimilarLocal(ZoneId)
。- 返回:
- 表示相同本地日期时间和偏移量的带时区的日期时间,不能为空
-
toInstant
将此日期时间转换为Instant
。返回一个表示与此日期时间相同时间线上的
Instant
。- 返回:
- 表示相同时刻的Instant,不能为空
-
toEpochSecond
public long toEpochSecond()将此日期时间转换为从1970-01-01T00:00:00Z时代开始的秒数。这允许将此日期时间转换为
epoch-seconds
字段的值。这主要用于低级别转换,而不是一般应用程序使用。- 返回:
- 从1970-01-01T00:00:00Z时代开始的秒数
-
compareTo
将此日期时间与另一个日期时间进行比较。比较基于时刻,然后是本地日期时间。它是“与equals一致”的,如
Comparable
所定义。例如,以下是比较顺序:
2008-12-03T10:30+01:00
2008-12-03T11:00+01:00
2008-12-03T12:00+02:00
2008-12-03T11:30+01:00
2008-12-03T12:00+01:00
2008-12-03T12:30+01:00
equals()
一致。- 指定者:
-
compareTo
在接口Comparable<OffsetDateTime>
- 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
-
比较器值,即与
other
的时刻的比较,如果它们不相等;如果等于other
的时刻,则比较other
的本地日期时间 - 参见:
-
isAfter
检查此日期时间的时刻是否在指定日期时间的时刻之后。此方法与
compareTo(java.time.OffsetDateTime)
和equals(java.lang.Object)
中的比较不同,因为它仅比较日期时间的时刻。这等效于使用dateTime1.toInstant().isAfter(dateTime2.toInstant());
。- 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
- 如果此日期时间在指定日期时间的时刻之后,则为true
-
isBefore
检查此日期时间的时刻是否在指定日期时间的时刻之前。此方法与
compareTo(java.time.OffsetDateTime)
中的比较不同,因为它仅比较日期时间的时刻。这等效于使用dateTime1.toInstant().isBefore(dateTime2.toInstant());
。- 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
- 如果此日期时间在指定日期时间的时刻之前,则为true
-
isEqual
检查此日期时间的时刻是否等于指定日期时间的时刻。此方法与
compareTo(java.time.OffsetDateTime)
和equals(java.lang.Object)
中的比较不同,因为它仅比较日期时间的时刻。这等效于使用dateTime1.toInstant().equals(dateTime2.toInstant());
。- 参数:
-
other
- 要比较的另一个日期时间,不能为空 - 返回:
- 如果时刻等于指定日期时间的时刻,则为true
-
equals
检查此日期时间是否等于另一个日期时间。比较基于本地日期时间和偏移量。要比较时间线上相同的时刻,请使用
isEqual(java.time.OffsetDateTime)
。仅比较OffsetDateTime
类型的对象,其他类型返回false。 -
hashCode
public int hashCode()此日期时间的哈希码。 -
toString
将此日期时间输出为String
,例如2007-12-03T10:15:30+01:00
。输出将是以下格式之一:
uuuu-MM-dd'T'HH:mmXXXXX
uuuu-MM-dd'T'HH:mm:ssXXXXX
uuuu-MM-dd'T'HH:mm:ss.SSSXXXXX
uuuu-MM-dd'T'HH:mm:ss.SSSSSSXXXXX
uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSXXXXX
-