ZonedDateTime
方法详细信息
-
now
public static ZonedDateTime now()
从默认时区中的系统时钟获取当前日期时间。这将在默认时区中查询system clock以获取当前日期时间。 区域和偏移量将根据时钟中的时区进行设置。
使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。
- 结果
- 使用系统时钟的当前日期时间,不为空
-
now
public static ZonedDateTime now(ZoneId zone)
从指定时区的系统时钟获取当前日期时间。这将查询system clock以获取当前日期时间。 指定时区可避免依赖于默认时区。 偏移量将从指定的时区计算。
使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。
- 参数
-
zone
- 要使用的区域ID,不为空 - 结果
- 使用系统时钟的当前日期时间,不为空
-
now
public static ZonedDateTime now(Clock clock)
从指定的时钟获得当前日期时间。这将查询指定的时钟以获取当前日期时间。 区域和偏移量将根据时钟中的时区进行设置。
使用此方法允许使用备用时钟进行测试。 可以使用dependency injection引入备用时钟。
- 参数
-
clock
- 要使用的时钟,不为空 - 结果
- 当前日期时间,不为空
-
of
public static ZonedDateTime of(LocalDate date, LocalTime time, ZoneId zone)
从本地日期和时间获得ZonedDateTime
的实例。这将创建一个与输入本地日期和时间尽可能匹配的分区日期时间。 时区规则(例如夏令时)意味着并非每个本地日期时间对指定区域都有效,因此可以调整本地日期时间。
本地日期时间和第一个组合形成一个本地日期时间。 然后将本地日期时间解析为时间线上的单个瞬间。 这是通过从区域ID的rules定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。
在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,当设置回时钟时,存在两个有效的偏移。 该方法使用通常对应于“夏天”的较早偏移。
在间隙的情况下,当时钟向前跳跃时,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
- 参数
-
date
- 本地日期,不为空 -
time
- 当地时间,非空 -
zone
- 时区,不是null - 结果
- 偏移日期时间,不为空
-
of
public static ZonedDateTime of(LocalDateTime localDateTime, ZoneId zone)
从本地日期时间获得ZonedDateTime
的实例。这将创建一个与输入本地日期时间尽可能匹配的分区日期时间。 时区规则(例如夏令时)意味着并非每个本地日期时间对指定区域都有效,因此可以调整本地日期时间。
本地日期时间在时间线上解析为单个瞬间。 这是通过从区域ID的rules定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。
在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,当设置回时钟时,存在两个有效的偏移。 该方法使用通常对应于“夏天”的较早偏移。
在间隙的情况下,当时钟向前跳跃时,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
- 参数
-
localDateTime
- 本地日期时间,不为空 -
zone
- 时区,不是null - 结果
- 分区日期时间,不为空
-
of
public static ZonedDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneId zone)
从年,月,日,小时,分钟,秒,纳秒和时区获得ZonedDateTime
的实例。这将创建一个分区日期时间,尽可能地匹配七个指定字段的本地日期时间。 时区规则(例如夏令时)意味着并非每个本地日期时间对指定区域都有效,因此可以调整本地日期时间。
本地日期时间在时间线上解析为单个瞬间。 这是通过从区域ID的rules定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。
在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,当设置回时钟时,存在两个有效的偏移。 该方法使用通常对应于“夏天”的较早偏移。
在间隙的情况下,当时钟向前跳跃时,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
此方法主要用于编写测试用例。 非测试代码通常使用其他方法来创建偏移时间。
LocalDateTime
具有等效工厂方法的五个额外便利变体,其中参数较少。 这里没有提供它们来减少API的占用空间。- 参数
-
year
- 表示年份,从MIN_YEAR到MAX_YEAR -
month
- 表示的月份,从1(1月)到12(12月) -
dayOfMonth
- 表示的日期,范围是1到31 -
hour
- 表示从0到23的小时 -
minute
- 表示从0到59的小时 -
second
- 表示从0到59的second
-
nanoOfSecond
- 代表的纳秒数,从0到999,999,999 -
zone
- 时区,不是null - 结果
- 偏移日期时间,不为空
- 异常
-
DateTimeException
- 如果任何字段的值超出范围,或者月份的月份无效
-
ofLocal
public static ZonedDateTime ofLocal(LocalDateTime localDateTime, ZoneId zone, ZoneOffset preferredOffset)
如果可能,使用首选偏移量从本地日期时间获取ZonedDateTime
的实例。本地日期时间在时间线上解析为单个瞬间。 这是通过从区域ID的rules定义的本地日期时间中找到UTC / Greenwich的有效偏移量来实现的。
在大多数情况下,本地日期时间只有一个有效的偏移量。 在重叠的情况下,时钟被设置回来,有两个有效的偏移。 如果首选偏移是有效偏移之一,则使用它。 否则使用较早的有效偏移,通常对应于“夏天”。
在间隙的情况下,时钟向前跳跃,没有有效的偏移。 相反,将本地日期时间调整为稍后的间隙长度。 对于典型的一小时夏令时变化,本地日期时间将在一小时后移动到通常对应于“夏天”的偏移量。
- 参数
-
localDateTime
- 本地日期时间,不为空 -
zone
- 时区,非空 -
preferredOffset
- 区域偏移量,如果没有首选项,则为null - 结果
- 分区日期时间,不为空
-
ofInstant
public static ZonedDateTime ofInstant(Instant instant, ZoneId zone)
从Instant
获得ZonedDateTime
的实例。这将创建一个与指定时间相同的分区日期时间。 调用ChronoZonedDateTime.toInstant()将返回等于此处使用的瞬间。
将瞬间转换为分区日期时间很简单,因为每个瞬间只有一个有效偏移量。
- 参数
-
instant
- 创建日期时间的瞬间,而不是null -
zone
- 时区,非空 - 结果
- 分区日期时间,不为空
- 异常
-
DateTimeException
- 如果结果超出支持的范围
-
ofInstant
public static ZonedDateTime ofInstant(LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)
从通过组合本地日期时间和偏移量形成的瞬间获得ZonedDateTime
的实例。这将创建一个分区日期时间combining
LocalDateTime
和ZoneOffset
。 该组合唯一地指定了没有歧义的瞬间。将瞬间转换为分区日期时间很简单,因为每个瞬间只有一个有效偏移量。 如果有效偏移量与指定的偏移量不同,则分区日期时间的日期时间和偏移量将与指定的不同。
如果
ZoneId
被使用是ZoneOffset
,该方法等效于of(LocalDateTime, ZoneId) 。- 参数
-
localDateTime
- 本地日期时间,不为空 -
offset
- 区域偏移量,不为空 -
zone
- 时区,非空 - 结果
- 分区日期时间,不为空
-
ofStrict
public static ZonedDateTime ofStrict(LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)
获得ZonedDateTime
的实例,严格验证本地日期时间,偏移量和区域ID的组合。这将创建一个分区日期时间,以确保偏移量根据指定区域的规则对本地日期时间有效。 如果偏移量无效,则抛出异常。
- 参数
-
localDateTime
- 本地日期时间,不为空 -
offset
- 区域偏移量,不为空 -
zone
- 时区,不是null - 结果
- 分区日期时间,不为空
- 异常
-
DateTimeException
- 如果参数组合无效
-
from
public static ZonedDateTime from(TemporalAccessor temporal)
从时态对象获得ZonedDateTime
的实例。这将根据指定的时间获得分区日期时间。
TemporalAccessor
表示一组任意日期和时间信息,该工厂将其转换为ZonedDateTime
的实例。转换将首先从时间对象获得
ZoneId
,如有必要,将返回到ZoneOffset
。 然后它会尝试获得Instant
,必要时可以回到LocalDateTime
。 结果将是ZoneId
或ZoneOffset
与Instant
或LocalDateTime
。 允许实现执行优化,例如访问与相关对象等效的那些字段。该方法匹配功能接口TemporalQuery的签名,允许其通过方法参考
ZonedDateTime::from
用作查询。- 参数
-
temporal
- 要转换的临时对象,而不是null - 结果
- 分区日期时间,不为空
- 异常
-
DateTimeException
- 如果无法转换为ZonedDateTime
- 另请参见:
- Chronology.zonedDateTime(TemporalAccessor)
-
parse
public static ZonedDateTime parse(CharSequence text)
从文本字符串(如2007-12-03T10:15:30+01:00[Europe/Paris]
获取ZonedDateTime
的实例。该字符串必须表示有效的日期时间,并使用DateTimeFormatter.ISO_ZONED_DATE_TIME进行解析。
- 参数
-
text
- 要解析的文本,例如“2007-12-03T10:15:30 + 01:00 [欧洲/巴黎]”,不为空 - 结果
- 解析的分区日期时间,而不是null
- 异常
-
DateTimeParseException
- 如果无法解析文本
-
parse
public static ZonedDateTime parse(CharSequence text, DateTimeFormatter formatter)
使用特定格式化程序从文本字符串中获取ZonedDateTime
的实例。使用格式化程序解析文本,返回日期时间。
- 参数
-
text
- 要解析的文本,而不是null -
formatter
- 要使用的格式化程序,而不是null - 结果
- 解析的分区日期时间,而不是null
- 异常
-
DateTimeParseException
- 如果无法解析文本
-
isSupported
public boolean isSupported(TemporalField field)
检查是否支持指定的字段。这将检查是否可以查询指定字段的日期时间。 如果是假,然后调用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
作为参数来获得此方法的结果。 字段是否受支持由字段确定。- Specified by:
-
isSupported
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
isSupported
在界面TemporalAccessor
- 参数
-
字段
- 要检查的字段,null返回false - 结果
- 如果此日期时间支持该字段,则为true,否则为false
-
-
isSupported
public boolean isSupported(TemporalUnit unit)
检查指定的单元是否受支持。这将检查是否可以将指定的单位添加到此日期时间或从该日期时间中减去。 如果为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
作为参数。 设备是否受支持由设备决定。- Specified by:
-
isSupported
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
isSupported
在界面Temporal
- 参数
-
unit
- 要检查的单位,null返回false - 结果
- 如果可以添加/减去单位,则为true,否则为false
-
-
range
public ValueRange range(TemporalField field)
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。 此日期时间用于提高返回范围的准确性。 如果无法返回范围,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是ChronoField,则在此处执行查询。 supported fields将返回适当的范围实例。 所有其他
ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用获得TemporalField.rangeRefinedBy(TemporalAccessor)
传递this
作为参数。 是否可以获得范围由该字段确定。- Specified by:
-
range
在界面TemporalAccessor
- 参数
-
字段
- 要查询范围的字段,而不是null - 结果
- 字段的有效值范围,不为null
- 异常
-
DateTimeException
- 如果无法获得该字段的范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段
-
get
public int get(TemporalField field)
从此日期时间获取指定字段的值为int
。这将查询此日期时间以获取指定字段的值。 返回的值将始终在该字段的有效值范围内。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是ChronoField,则在此处执行查询。 该supported fields将返回基于此日期时间有效值,除了
NANO_OF_DAY
,MICRO_OF_DAY
,EPOCH_DAY
,PROLEPTIC_MONTH
和INSTANT_SECONDS
这是太大,无法在int
并抛出UnsupportedTemporalTypeException
。 所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段不是
ChronoField
,则通过调用this
作为参数调用TemporalField.getFrom(TemporalAccessor)
获得此方法的结果。 是否可以获得该值以及该值表示的值由该字段确定。- Specified by:
-
get
在界面TemporalAccessor
- 参数
-
字段
- 要获取的字段,而不是null - 结果
- 该字段的值
- 异常
-
DateTimeException
- 如果无法获取该字段的值或该值超出该字段的有效值范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段或值的范围超过int
-
ArithmeticException
- 如果发生数字溢出
-
getLong
public long getLong(TemporalField field)
从此日期时间获取指定字段的值为long
。这将查询此日期时间以获取指定字段的值。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是ChronoField,则在此处执行查询。 supported fields将根据此日期时间返回有效值。 所有其他
ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)
传递this
作为参数。 是否可以获得该值以及该值表示的值由该字段确定。- Specified by:
-
getLong
在界面TemporalAccessor
- 参数
-
字段
- 要获取的字段,而不是null - 结果
- 该字段的值
- 异常
-
DateTimeException
- 如果无法获得该字段的值 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数字溢出
-
getOffset
public ZoneOffset getOffset()
获取区域偏移量,例如“+01:00”。这是本地日期时间与UTC /格林威治的偏移量。
- Specified by:
-
getOffset
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 区域偏移,不为空
-
withEarlierOffsetAtOverlap
public ZonedDateTime withEarlierOffsetAtOverlap()
返回此日期时间的副本,将区域偏移更改为本地时间线重叠处的两个有效偏移中较早的一个。当本地时间线重叠时,例如在秋季夏令时切换时,此方法仅具有任何效果。 在这种情况下,本地日期时间有两个有效的偏移量。 调用此方法将返回一个分区日期时间,其中包含所选的两个中的较早者。
如果在不重叠时调用此方法,则返回
this
。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
withEarlierOffsetAtOverlap
在界面ChronoZonedDateTime<LocalDate>
- 结果
-
基于此日期时间的
ZonedDateTime
,具有较早的偏移量,而不是null
-
withLaterOffsetAtOverlap
public ZonedDateTime withLaterOffsetAtOverlap()
返回此日期时间的副本,将区域偏移更改为本地时间线重叠处的两个有效偏移中的较晚者。当本地时间线重叠时,例如在秋季夏令时切换时,此方法仅具有任何效果。 在这种情况下,本地日期时间有两个有效的偏移量。 调用此方法将返回一个分区日期时间,其中包含所选择的两个日期时间。
如果在不重叠时调用此方法,则返回
this
。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
withLaterOffsetAtOverlap
在界面ChronoZonedDateTime<LocalDate>
- 结果
-
基于此日期时间的
ZonedDateTime
,后面的偏移量,不为空
-
getZone
public ZoneId getZone()
获取时区,例如“Europe / Paris”。这将返回区域ID。 这标识了时区rules ,用于确定UTC / Greenwich的偏移何时以及如何更改。
区域ID可以与offset相同。 如果这是真的,那么由于时区规则,任何未来的计算(例如加法或减法)都没有复杂的边缘情况。 另见withFixedOffsetZone() 。
- Specified by:
-
getZone
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 时区,不是空的
-
withZoneSameLocal
public ZonedDateTime withZoneSameLocal(ZoneId zone)
使用不同的时区返回此日期时间的副本,如果可能,保留本地日期时间。此方法更改时区并保留本地日期时间。 仅当本地日期时间对新区域无效时才会更改,使用与ofLocal(LocalDateTime, ZoneId, ZoneOffset)相同的方法确定。
要更改区域并调整本地日期时间,请使用withZoneSameInstant(ZoneId) 。
此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
withZoneSameLocal
在界面ChronoZonedDateTime<LocalDate>
- 参数
-
zone
- 要更改为的时区,而不是null - 结果
-
a
ZonedDateTime
基于此日期时间与请求的区域,不为空
-
withZoneSameInstant
public ZonedDateTime withZoneSameInstant(ZoneId zone)
使用不同的时区返回此日期时间的副本,保留该瞬间。此方法更改时区并保留瞬间。 这通常会导致本地日期时间发生变化。
该方法基于保留相同的瞬间,因此本地时间线中的间隙和重叠对结果没有影响。
要在保持当地时间的同时更改偏移量,请使用withZoneSameLocal(ZoneId) 。
- Specified by:
-
withZoneSameInstant
在界面ChronoZonedDateTime<LocalDate>
- 参数
-
zone
- 要更改为的时区,而不是null - 结果
-
a
ZonedDateTime
基于此日期时间与请求的区域,不为空 - 异常
-
DateTimeException
- 如果结果超出支持的日期范围
-
withFixedOffsetZone
public ZonedDateTime withFixedOffsetZone()
返回此日期时间的副本,并将区域ID设置为偏移量。这将返回一个分区日期时间,其中区域ID与getOffset()相同。 结果的本地日期时间,偏移量和时刻将与此日期时间相同。
将日期时间设置为固定的单个偏移量意味着由于时区规则,任何未来的计算(例如加法或减法)都不会出现复杂的边缘情况。 这在通过网络发送分区日期时间时也很有用,因为大多数协议(例如ISO-8601)仅处理偏移,而不处理基于区域的区域ID。
这相当于
ZonedDateTime.of(zdt.toLocalDateTime(), zdt.getOffset())
。- 结果
-
ZonedDateTime
,区域ID设置为偏移量,不为空
-
toLocalDateTime
public LocalDateTime toLocalDateTime()
获取此日期时间的LocalDateTime
部分。这将返回
LocalDateTime
,其年,月,日和时间与此日期时间相同。- Specified by:
-
toLocalDateTime
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 此日期时间的本地日期时间部分,不为空
-
toLocalDate
public LocalDate toLocalDate()
获取此日期时间的LocalDate
部分。这将返回
LocalDate
,其年,月,日为该日期时间。- Specified by:
-
toLocalDate
在界面ChronoZonedDateTime<LocalDate>
- 结果
- 此日期时间的日期部分,不为空
-
getYear
public int getYear()
获取年份字段。此方法返回年份的原始值
int
。根据
get(YEAR)
,此方法返回的年份是get(YEAR)
。 要获得年代,请使用get(YEAR_OF_ERA)
。- 结果
- 年份,从MIN_YEAR到MAX_YEAR
-
getMonthValue
public int getMonthValue()
获取1到12之间的月份字段。此方法将月份作为
int
从1返回到12.如果通过调用getMonth()使用枚举Month,则应用程序代码通常更清晰。- 结果
- 月份,从1到12
- 另请参见:
- getMonth()
-
getMonth
public Month getMonth()
使用Month
枚举获取年份字段。此方法返回月份的枚举Month 。 这避免了
int
值的含义混淆。 如果需要访问原始值int
则枚举提供int value 。- 结果
- 一年中的月份,不是空的
- 另请参见:
- getMonthValue()
-
getDayOfMonth
public int getDayOfMonth()
获取日期字段。此方法返回日期的原始值
int
。- 结果
- 每月,从1到31
-
getDayOfYear
public int getDayOfYear()
获取日期字段。此方法返回日期的原始值
int
。- 结果
- 一年中,从1到365,或闰年366
-
getDayOfWeek
public DayOfWeek getDayOfWeek()
获取星期几字段,这是一个枚举DayOfWeek
。此方法返回星期几的枚举DayOfWeek 。 这避免了
int
值的含义混淆。 如果需要访问原始值int
则枚举提供int value 。其他信息可以从
DayOfWeek
获得。 这包括值的文本名称。- 结果
- 星期几,不是空的
-
toLocalTime
public LocalTime toLocalTime()
获取此日期时间的LocalTime
部分。这将返回
LocalTime
,其时间,分钟,秒和纳秒与此日期时间相同。- Specified by:
-
toLocalTime
in interfaceChronoZonedDateTime<LocalDate>
- 结果
- 此日期时间的时间部分,不为空
-
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
public ZonedDateTime with(TemporalAdjuster adjuster)
返回此日期时间的调整副本。这将返回一个
ZonedDateTime
,基于此,调整日期时间。 使用指定的调整器策略对象进行调整。 阅读调整器的文档,了解将进行哪些调整。简单的调整器可能只是设置其中一个字段,例如年份字段。 更复杂的调整器可能会将日期设置为该月的最后一天。 TemporalAdjusters提供了一系列常见调整。 这些包括找到“月的最后一天”和“下周三”。 关键日期时间类还实现了
TemporalAdjuster
接口,例如Month和MonthDay 。 理算员负责处理特殊情况,例如不同长度的月份和闰年。例如,此代码返回7月最后一天的日期:
import static java.time.Month.*; import static java.time.temporal.TemporalAdjusters.*; result = zonedDateTime.with(JULY).with(lastDayOfMonth());
类LocalDate和LocalTime实现
TemporalAdjuster
,因此此方法可用于更改日期,时间或偏移量:result = zonedDateTime.with(date); result = zonedDateTime.with(time);
ZoneOffset也实现了
TemporalAdjuster
但是使用它作为参数通常没有任何效果。ZonedDateTime
的偏移量主要由时区控制。 因此,更改偏移量通常没有意义,因为本地日期时间和区域只有一个有效偏移量。 如果分区日期时间处于夏令时重叠,则偏移量用于在两个有效偏移之间切换。 在所有其他情况下,忽略偏移量。通过在指定的调整器上调用TemporalAdjuster.adjustInto(Temporal)方法(通过
this
作为参数)来获得此方法的结果。此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
with
在界面ChronoZonedDateTime<LocalDate>
- Specified by:
-
with
in界面Temporal
- 参数
-
adjuster
- 要使用的调整器,不为null - 结果
-
a
ZonedDateTime
基于this
进行了调整,而不是null - 异常
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数字溢出
-
with
public ZonedDateTime with(TemporalField field, long newValue)
返回此日期时间的副本,并将指定字段设置为新值。这将返回一个
ZonedDateTime
,基于此值,更改指定字段的值。 这可用于更改任何支持的字段,例如年,月或日。 如果无法设置该值,因为不支持该字段或由于某些其他原因,将引发异常。在某些情况下,更改指定字段可能导致生成的日期时间变为无效,例如将月份从1月31日更改为2月将使日期无效。 在这种情况下,该字段负责解决日期。 通常,它会选择上一个有效日期,这个日期是本例中2月的最后一个有效日期。
如果该字段是ChronoField,则在此处执行调整。
INSTANT_SECONDS
字段将返回指定时刻的日期时间。 该区域和纳秒级不变。 结果将具有从新的即时和原始区域派生的偏移量。 如果新的瞬时值超出有效范围,则将抛出DateTimeException
。通常会忽略
OFFSET_SECONDS
字段。ZonedDateTime
的偏移量主要由时区控制。 因此,更改偏移量通常没有意义,因为本地日期时间和区域只有一个有效偏移量。 如果分区日期时间处于夏令时重叠,则偏移量用于在两个有效偏移之间切换。 在所有其他情况下,忽略偏移量。 如果新的偏移值超出有效范围,则抛出DateTimeException
。其他supported fields将按照LocalDateTime上的匹配方法运行 。 该区域不是
上一篇: php 全球法定时区完整列表
推荐阅读