模块  java.base
软件包  java.time

Class OffsetDateTime

  • 实现的所有接口
    SerializableComparable<OffsetDateTime>TemporalTemporalAccessorTemporalAdjuster

    public final class OffsetDateTime
    extends Object
    implements Temporal, TemporalAdjuster, Comparable<OffsetDateTime>, Serializable
    ISO- 2007-12-03T10:15:30+01:00 UTC / Greenwich偏移的日期时间,例如2007-12-03T10:15:30+01:00

    OffsetDateTime是具有偏移量的日期时间的不可变表示。 此类存储所有日期和时间字段,精度为纳秒,以及与UTC / Greenwich的偏移量。 例如,值“2007年10月2日13:45:30.123456789 +02:00”可以存储在OffsetDateTime

    OffsetDateTimeZonedDateTimeInstant全部存储在时间线瞬间纳秒的精度。 Instant是最简单的,只是代表瞬间。 OffsetDateTime添加到UTC / Greenwich的偏移瞬间,这允许获得本地日期时间。 ZonedDateTime添加了完整的时区规则。

    ZonedDateTimeInstant用于在更简单的应用程序中建模数据。 在更详细地建模日期时间概念时,或者在与数据库或网络协议进行通信时,可以使用此类。

    这是一个value-based班; OffsetDateTime实例上使用身份敏感操作(包括引用相等( == ),标识哈希码或同步)可能会产生不可预测的结果,应该避免使用。 应使用equals方法进行比较。

    实现要求:
    这个类是不可变的和线程安全的。
    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 字段详细信息

      • MIN

        public static final OffsetDateTime MIN
        支持的最小值为OffsetDateTime ,' - OffsetDateTime :00:00 + 18:00'。 这是最大偏移量中最小日期开始时的午夜的本地日期时间(较大的偏移量在时间线上较早)。 它结合了LocalDateTime.MINZoneOffset.MAX 这可以被应用程序用作“远远过去”的日期时间。
      • MAX

        public static final OffsetDateTime MAX
        支持的最大值为OffsetDateTime ,'+ 999999999-12-31T23:59:59.999999999-18:00'。 这是在最小偏移量的最大日期结束时午夜之前的本地日期时间(较大的负偏移量稍后在时间线上)。 它结合了LocalDateTime.MAXZoneOffset.MIN 这可以被应用程序用作“远期未来”的日期时间。
    • 方法详细信息

      • now

        public static OffsetDateTime now()
        从默认时区中的系统时钟获取当前日期时间。

        这将在默认时区中查询system clock以获取当前日期时间。 偏移量将根据时钟中的时区计算。

        使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。

        结果
        使用系统时钟的当前日期时间,不为空
      • now

        public static OffsetDateTime now​(ZoneId zone)
        从指定时区的系统时钟获取当前日期时间。

        这将查询system clock以获取当前日期时间。 指定时区可避免依赖于默认时区。 偏移量将从指定的时区计算。

        使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。

        参数
        zone - 要使用的区域ID,不为空
        结果
        使用系统时钟的当前日期时间,不为空
      • now

        public static OffsetDateTime now​(Clock clock)
        从指定的时钟获得当前日期时间。

        这将查询指定的时钟以获取当前日期时间。 偏移量将根据时钟中的时区计算。

        使用此方法允许使用备用时钟进行测试。 可以使用dependency injection引入备用时钟。

        参数
        clock - 要使用的时钟,不为空
        结果
        当前日期时间,不为空
      • of

        public static OffsetDateTime of​(LocalDate date,
                                        LocalTime time,
                                        ZoneOffset offset)
        从日期,时间和偏移量获得OffsetDateTime的实例。

        这将创建具有指定的本地日期,时间和偏移量的偏移日期时间。

        参数
        date - 本地日期,不为空
        time - 当地时间,非空
        offset - 区域偏移量,不为空
        结果
        偏移日期时间,不为空
      • of

        public static OffsetDateTime of​(LocalDateTime dateTime,
                                        ZoneOffset offset)
        从日期时间和偏移量获得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月(1月)到12月(12月)的月份
        dayOfMonth - 表示的日期,从1到31
        hour - 表示从0到23的小时
        minute - 表示从0到59的小时
        second - 代表的第二分钟,从0到59
        nanoOfSecond - 代表的纳秒数,从0到999,999,999
        offset - 区域偏移,不为空
        结果
        偏移日期时间,不为空
        异常
        DateTimeException - 如果任何字段的值超出范围,或者月份的月份无效
      • ofInstant

        public static OffsetDateTime ofInstant​(Instant instant,
                                               ZoneId zone)
        Instant和区域ID获取OffsetDateTime的实例。

        这将创建一个偏移日期时间,其时间与指定的时间相同。 从UTC / Greenwich查找偏移量很简单,因为每个瞬间只有一个有效偏移量。

        参数
        instant - 创建日期时间的瞬间,而不是null
        zone - 时区,可以是偏移量,不为空
        结果
        偏移日期时间,不为空
        异常
        DateTimeException - 如果结果超出支持的范围
      • from

        public static OffsetDateTime from​(TemporalAccessor temporal)
        从时态对象获得OffsetDateTime的实例。

        这基于指定的时间获得偏移日期时间。 TemporalAccessor表示一组任意日期和时间信息,该工厂将其转换为OffsetDateTime的实例。

        转换将首先从时间对象获得ZoneOffset 然后它会尝试获得LocalDateTime ,必要时可以回到Instant 结果将是ZoneOffsetLocalDateTimeInstant 允许实现执行优化,例如访问与相关对象等效的那些字段。

        此方法匹配功能接口TemporalQuery的签名,允许通过方法引用OffsetDateTime::from将其用作查询。

        参数
        temporal - 要转换的时态对象,而不是null
        结果
        偏移日期时间,不为空
        异常
        DateTimeException - 如果无法转换为 OffsetDateTime
      • parse

        public static OffsetDateTime parse​(CharSequence text)
        从文本字符串(如2007-12-03T10:15:30+01:00获取OffsetDateTime的实例。

        该字符串必须表示有效的日期时间,并使用DateTimeFormatter.ISO_OFFSET_DATE_TIME进行解析。

        参数
        text - 要解析的文本,例如“2007-12-03T10:15:30 + 01:00”,不为null
        结果
        解析的偏移日期时间,不为空
        异常
        DateTimeParseException - 如果无法解析文本
      • parse

        public static OffsetDateTime parse​(CharSequence text,
                                           DateTimeFormatter formatter)
        使用特定格式化程序从文本字符串中获取OffsetDateTime的实例。

        使用格式化程序解析文本,返回日期时间。

        参数
        text - 要解析的文本,而不是null
        formatter - 要使用的格式化程序,而不是null
        结果
        解析的偏移日期时间,不为空
        异常
        DateTimeParseException - 如果无法解析文本
      • isSupported

        public boolean isSupported​(TemporalField field)
        检查是否支持指定的字段。

        这将检查是否可以查询指定字段的日期时间。 如果是假,然后调用rangegetwith(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 in interface 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在界面 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_DAYMICRO_OF_DAYEPOCH_DAYPROLEPTIC_MONTHINSTANT_SECONDS这是太大,无法在int并抛出UnsupportedTemporalTypeException 所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)传递this作为参数。 是否可以获得该值以及该值表示的值由该字段确定。

        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 /格林威治的偏移量。

        结果
        区域偏移,不为空
      • withOffsetSameLocal

        public OffsetDateTime withOffsetSameLocal​(ZoneOffset offset)
        返回具有指定偏移量的此OffsetDateTime的副本,确保结果具有相同的本地日期时间。

        此方法返回具有相同的LocalDateTime和指定的ZoneOffset 无需计算或执行。 例如,如果此时间表示2007-12-03T10:30+02:00且指定的偏移量为+03:00 ,则此方法将返回2007-12-03T10:30+03:00

        要考虑偏移之间的差异,并调整时间字段,请使用withOffsetSameInstant(java.time.ZoneOffset)

        此实例是不可变的,不受此方法调用的影响。

        参数
        offset - 要更改为的区域偏移量,不为空
        结果
        基于此日期时间的 OffsetDateTime ,请求的偏移量,不为空
      • withOffsetSameInstant

        public OffsetDateTime withOffsetSameInstant​(ZoneOffset offset)
        返回具有指定偏移量的此OffsetDateTime的副本,确保结果处于同一时刻。

        此方法返回具有指定的ZoneOffsetLocalDateTime的对象,并通过两个偏移之间的差异进行调整。 这将导致表示同一时刻的旧对象和新对象。 这对于在不同偏移中查找本地时间很有用。 例如,如果此时间表示2007-12-03T10:30+02:00且指定的偏移量为+03:00 ,则此方法将返回2007-12-03T11:30+03:00

        要在不调整当地时间的情况下更改偏移,请使用withOffsetSameLocal(java.time.ZoneOffset)

        此实例是不可变的,不受此方法调用的影响。

        参数
        offset - 要更改为的区域偏移量,不为空
        结果
        OffsetDateTime基于此日期时间与请求的偏移量,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • toLocalDateTime

        public LocalDateTime toLocalDateTime()
        获取此日期时间的LocalDateTime部分。

        这将返回LocalDateTime ,其年,月,日和时间与此日期时间相同。

        结果
        此日期时间的本地日期时间部分,不为空
      • toLocalDate

        public LocalDate toLocalDate()
        获取此日期时间的LocalDate部分。

        这将返回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 ,其时间,分钟,秒和纳秒与此日期时间相同。

        结果
        此日期时间的时间部分,不为空
      • 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 OffsetDateTime with​(TemporalAdjuster adjuster)
        返回此日期时间的调整副本。

        这将返回一个基于此的OffsetDateTime ,并调整日期时间。 使用指定的调整器策略对象进行调整。 阅读调整器的文档,了解将进行哪些调整。

        简单的调整器可能只是设置其中一个字段,例如年份字段。 更复杂的调整器可能会将日期设置为该月的最后一天。 TemporalAdjusters提供了一系列常见调整。 这些包括找到“月的最后一天”和“下周三”。 关键日期时间类还实现了TemporalAdjuster接口,例如MonthMonthDay 理算员负责处理特殊情况,例如不同长度的月份和闰年。

        例如,此代码返回7月最后一天的日期:

          import static java.time.Month.*;
          import static java.time.temporal.TemporalAdjusters.*;
        
          result = offsetDateTime.with(JULY).with(lastDayOfMonth()); 

        LocalDateLocalTimeZoneOffset实施TemporalAdjuster ,从而可以用这种方法来改变日期,时间或偏移:

          result = offsetDateTime.with(date);
          result = offsetDateTime.with(time);
          result = offsetDateTime.with(offset); 

        通过在指定的调整器上调用TemporalAdjuster.adjustInto(Temporal)方法(通过this作为参数)来获得此方法的结果。

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        with在界面 Temporal
        参数
        adjuster - 要使用的调整器,不为null
        结果
        一个 OffsetDateTime基于 this与制造,不为空调整
        异常
        DateTimeException - 如果无法进行调整
        ArithmeticException - 如果发生数字溢出
      • with

        public OffsetDateTime with​(TemporalField field,
                                   long newValue)
        返回此日期时间的副本,并将指定字段设置为新值。

        这将返回OffsetDateTime (基于此值),并更改指定字段的值。 这可用于更改任何支持的字段,例如年,月或日。 如果无法设置该值,因为不支持该字段或由于某些其他原因,将引发异常。

        在某些情况下,更改指定字段可能导致生成的日期时间变为无效,例如将月份从1月31日更改为2月将使日期无效。 在这种情况下,该字段负责解决日期。 通常,它会选择上一个有效日期,这个日期是本例中2月的最后一个有效日期。

        如果该字段是ChronoField则在此处执行调整。

        INSTANT_SECONDS字段将返回指定时刻的日期时间。 偏移和纳秒不变。 如果新的瞬时值超出有效范围,则将抛出DateTimeException

        OFFSET_SECONDS字段将返回具有指定偏移量的日期时间。 本地日期时间不变。 如果新的偏移值超出有效范围,则抛出DateTimeException

        其他supported fields将按照LocalDateTime的匹配方法运行 在这种情况下,偏移量不是计算的一部分,并且不会改变。

        所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.adjustInto(Temporal, long)传递this作为参数。 在这种情况下,该字段确定是否以及如何调整瞬间。

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        with在界面 Temporal
        参数
        字段 - 要在结果中设置的字段,不为null
        newValue - 结果中字段的新值
        结果
        OffsetDateTime基于 this并指定了字段集,不为空
        异常
        DateTimeException - 如果无法设置该字段
        UnsupportedTemporalTypeException - 如果不支持该字段
        ArithmeticException - 如果发生数字溢出
      • withYear

        public OffsetDateTime withYear​(int year)
        返回此OffsetDateTime的副本,并更改年份。

        时间和偏移量不会影响计算,结果也相同。 如果该年的某一天无效,则会将其更改为该月的最后一个有效日期。

        此实例是不可变的,不受此方法调用的影响。

        参数
        year - 结果中设置的年份,从MIN_YEAR到MAX_YEAR
        结果
        基于此请求年份的日期时间的 OffsetDateTime ,不为空
        异常
        DateTimeException - 如果年份值无效
      • withMonth

        public OffsetDateTime withMonth​(int month)
        返回此OffsetDateTime的副本,其中年份已更改。

        时间和偏移量不会影响计算,结果也相同。 如果该年的某一天无效,则会将其更改为该月的最后一个有效日期。

        此实例是不可变的,不受此方法调用的影响。

        参数
        month - 结果中设置的月份,从1(1月)到12(12月)
        结果
        基于此日期时间的 OffsetDateTime与请求的月份,不为空
        异常
        DateTimeException - 如果月份值无效
      • withDayOfMonth

        public OffsetDateTime withDayOfMonth​(int dayOfMonth)
        返回此OffsetDateTime的副本,并更改日期。

        如果生成的OffsetDateTime无效,则抛出异常。 时间和偏移量不会影响计算,结果也相同。

        此实例是不可变的,不受此方法调用的影响。

        参数
        dayOfMonth - 在结果中设置的日期,从1到28-31
        结果
        基于此日期时间和请求日期的 OffsetDateTime ,不为空
        异常
        DateTimeException - 如果日期值无效,或者月份的月份无效
      • withDayOfYear

        public OffsetDateTime withDayOfYear​(int dayOfYear)
        返回此OffsetDateTime的副本,并更改日期。

        时间和偏移量不会影响计算,结果也相同。 如果生成的OffsetDateTime无效,则抛出异常。

        此实例是不可变的,不受此方法调用的影响。

        参数
        dayOfYear - 结果中设置的日期,从1到365-366
        结果
        基于此日期和请求日期的 OffsetDateTime ,不为空
        异常
        DateTimeException - 如果日期值无效,或者年度日期无效
      • withHour

        public OffsetDateTime withHour​(int hour)
        返回此OffsetDateTime的副本,并更改日期。

        日期和偏移量不会影响计算,结果也相同。

        此实例是不可变的,不受此方法调用的影响。

        参数
        hour - 在结果中设置的小时,从0到23
        结果
        基于此日期时间的 OffsetDateTime ,请求小时,不为空
        异常
        DateTimeException - 如果小时值无效
      • withMinute

        public OffsetDateTime withMinute​(int minute)
        返回此OffsetDateTime的副本,并更改了分钟。

        日期和偏移量不会影响计算,结果也相同。

        此实例是不可变的,不受此方法调用的影响。

        参数
        minute - 在结果中设置的分钟数,从0到59
        结果
        基于此日期时间的 OffsetDateTime ,请求分钟,不为空
        异常
        DateTimeException - 如果分钟值无效
      • withSecond

        public OffsetDateTime withSecond​(int second)
        返回此OffsetDateTime的副本,并在第二分钟更改。

        日期和偏移量不会影响计算,结果也相同。

        此实例是不可变的,不受此方法调用的影响。

        参数
        second - 在结果中设置的 second ,从0到59
        结果
        基于此日期时间的 OffsetDateTime ,请求秒,不为空
        异常
        DateTimeException - 如果第二个值无效
      • withNano

        public OffsetDateTime withNano​(int nanoOfSecond)
        返回此OffsetDateTime的副本,其中纳秒级已更改。

        日期和偏移量不会影响计算,结果也相同。

        此实例是不可变的,不受此方法调用的影响。

        参数
        nanoOfSecond - 在结果中设置的纳秒数,从0到999,999,999
        结果
        基于此日期时间的 OffsetDateTime ,请求纳秒,不为空
        异常
        DateTimeException - 如果纳米值无效
      • truncatedTo

        public OffsetDateTime truncatedTo​(TemporalUnit unit)
        返回此OffsetDateTime的副本,并截断时间。

        截断返回原始日期时间的副本,其中小于指定单位的字段设置为零。 例如,使用minutes单位截断将第二分钟和纳秒级字段设置为零。

        该单位必须有一个duration ,它分为标准日的长度,没有余数。 这包括ChronoUnitDAYS上提供的所有时间单位。 其他单位抛出异常。

        偏移量不会影响计算,结果也相同。

        此实例是不可变的,不受此方法调用的影响。

        参数
        unit - 要截断的单位,而不是null
        结果
        基于此日期时间的 OffsetDateTime ,截断时间,不为空
        异常
        DateTimeException - 如果无法截断
        UnsupportedTemporalTypeException - 如果不支持该设备
      • plus

        public OffsetDateTime plus​(TemporalAmount amountToAdd)
        返回此日期时间的副本,并添加指定的数量。

        这将返回基于此值的OffsetDateTime ,并添加指定的金额。 金额通常为PeriodDuration但可能是实现TemporalAmount界面的任何其他类型。

        通过调用TemporalAmount.addTo(Temporal)将计算委托给amount对象。 实施金额可以任意方式自由实施,但通常会回拨plus(long, TemporalUnit) 请参阅金额实施的文档,以确定是否可以成功添加。

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        plus在界面 Temporal
        参数
        amountToAdd - 要添加的金额,不为空
        结果
        基于此日期时间的 OffsetDateTime ,添加,不为空
        异常
        DateTimeException - 如果无法添加
        ArithmeticException - 如果发生数字溢出
      • plus

        public OffsetDateTime plus​(long amountToAdd,
                                   TemporalUnit unit)
        返回此日期时间的副本,并添加指定的数量。

        这将返回一个基于此的OffsetDateTime ,其中包含已添加单位的金额。 如果无法添加金额,因为不支持该单位或由于某些其他原因,则会引发异常。

        如果该字段是ChronoUnit则添加由LocalDateTime.plus(long, TemporalUnit)实现。 偏移量不是计算的一部分,结果将保持不变。

        如果该字段不是ChronoUnit ,则通过调用this作为参数调用TemporalUnit.addTo(Temporal, long)获得此方法的结果。 在这种情况下,该单元确定是否以及如何执行添加。

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        plus in interface Temporal
        参数
        amountToAdd - 要添加到结果中的单位数量可能为负数
        unit - 要添加的金额的单位,而不是空
        结果
        基于此日期时间的 OffsetDateTime ,添加了指定的金额,而不是null
        异常
        DateTimeException - 如果无法添加
        UnsupportedTemporalTypeException - 如果不支持该装置
        ArithmeticException - 如果发生数字溢出
      • plusYears

        public OffsetDateTime plusYears​(long years)
        返回此OffsetDateTime的副本,并添加指定的年数。

        此方法分三个步骤将指定的金额添加到年份字段:

        1. 将输入年份添加到年份字段
        2. 检查结果日期是否无效
        3. 如有必要,将日期调整为最后一个有效日期

        例如,2008-02-29(闰年)加上一年将导致无效日期2009-02-29(标准年份)。 而不是返回无效结果,而是选择该月的最后一个有效日期2009-02-28。

        此实例是不可变的,不受此方法调用的影响。

        参数
        years - 添加的年份,可能是负面的
        结果
        基于此日期时间的 OffsetDateTime ,添加年份,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • plusMonths

        public OffsetDateTime plusMonths​(long months)
        返回此OffsetDateTime的副本,并添加指定的月份数。

        此方法分三个步骤将指定的数量添加到months字段:

        1. 将输入月份添加到年度字段中
        2. 检查结果日期是否无效
        3. 如有必要,将日期调整为最后一个有效日期

        例如,2007-03-31加上一个月将导致2007-04-31无效日期。 而不是返回无效结果,而是选择该月的最后一个有效日期,即2007-04-30。

        此实例是不可变的,不受此方法调用的影响。

        参数
        months - 要添加的月份,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,添加月份,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • plusWeeks

        public OffsetDateTime plusWeeks​(long weeks)
        返回此OffsetDateTime的副本,并添加指定的周数。

        此方法将指定的周数添加到days字段中,根据需要递增月份和年份字段,以确保结果保持有效。 结果仅在超过最大/最小年份时无效。

        例如,2008-12-31加上一周将导致2009-01-07。

        此实例是不可变的,不受此方法调用的影响。

        参数
        weeks - 要添加的周数,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,添加周数,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • plusDays

        public OffsetDateTime plusDays​(long days)
        返回此OffsetDateTime的副本,并添加指定的天数。

        此方法将指定的金额添加到days字段,根据需要递增月份和年份字段,以确保结果保持有效。 结果仅在超过最大/最小年份时无效。

        例如,2008-12-31加上一天将导致2009-01-01。

        此实例是不可变的,不受此方法调用的影响。

        参数
        days - 添加的日期,可能是负面的
        结果
        基于此日期时间的 OffsetDateTime ,添加日期,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • plusHours

        public OffsetDateTime plusHours​(long hours)
        返回此OffsetDateTime的副本,并添加指定的小时数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        hours - 要添加的小时数,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,添加小时数,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • plusMinutes

        public OffsetDateTime plusMinutes​(long minutes)
        返回此OffsetDateTime的副本,并添加指定的分钟数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        minutes - 要添加的分钟数,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,添加分钟,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • plusSeconds

        public OffsetDateTime plusSeconds​(long seconds)
        返回此OffsetDateTime的副本,并添加指定的秒数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        seconds - 要添加的秒数,可能为负数
        结果
        基于此日期时间的 OffsetDateTime ,添加秒数,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • plusNanos

        public OffsetDateTime plusNanos​(long nanos)
        返回此OffsetDateTime的副本, OffsetDateTime添加了指定的纳秒数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        nanos - 要添加的 nanos ,可能是负面的
        结果
        基于此日期时间的 OffsetDateTime ,加上纳秒,不为空
        异常
        DateTimeException - 如果无法将单位添加到此类型
      • minus

        public OffsetDateTime minus​(TemporalAmount amountToSubtract)
        返回此日期时间的副本,并减去指定的数量。

        这将返回一个OffsetDateTime ,基于此值,减去指定的数量。 金额通常为PeriodDuration但可以是实现TemporalAmount接口的任何其他类型。

        通过调用TemporalAmount.subtractFrom(Temporal)将计算委托给amount对象。 量实现可以以任何方式自由地实现减法,但是它通常会回调到minus(long, TemporalUnit) 请参阅金额实施的文档,以确定是否可以成功减去它。

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        minus在界面 Temporal
        参数
        amountToSubtract - 要减去的金额,而不是空
        结果
        基于此日期时间的 OffsetDateTime进行减法,而不是空
        异常
        DateTimeException - 如果无法进行减法
        ArithmeticException - 如果发生数字溢出
      • minus

        public OffsetDateTime minus​(long amountToSubtract,
                                    TemporalUnit unit)
        返回此日期时间的副本,并减去指定的数量。

        这将返回一个OffsetDateTime ,基于此,减去单位的数量。 如果无法减去金额,因为不支持该单位或由于某些其他原因,则抛出异常。

        该方法相当于plus(long, TemporalUnit) ,其数量为负数 有关添加和减法如何工作的完整描述,请参阅该方法。

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        minus在界面 Temporal
        参数
        amountToSubtract - 从结果中减去的单位数量可能为负数
        unit - 要减去的金额的单位,而不是空
        结果
        基于此日期时间的 OffsetDateTime ,减去指定的金额,而不是空
        异常
        DateTimeException - 如果无法进行减法
        UnsupportedTemporalTypeException - 如果不支持该装置
        ArithmeticException - 如果发生数字溢出
      • minusYears

        public OffsetDateTime minusYears​(long years)
        返回此OffsetDateTime的副本,并减去指定的年数。

        此方法分三个步骤从年份字段中减去指定的金额:

        1. 从年份字段中减去输入年份
        2. 检查结果日期是否无效
        3. 如有必要,将日期调整为最后一个有效日期

        例如,2008-02-29(闰年)减去一年将导致无效日期2007-02-29(标准年份)。 而不是返回无效结果,而是选择该月的最后一个有效日期,即2007-02-28。

        此实例是不可变的,不受此方法调用的影响。

        参数
        years - 减去的年份,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,减去年份,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • minusMonths

        public OffsetDateTime minusMonths​(long months)
        返回此OffsetDateTime的副本,并减去指定的月数。

        此方法分三个步骤从months字段中减去指定的金额:

        1. 从月份字段中减去输入月份
        2. 检查结果日期是否无效
        3. 如有必要,将日期调整为最后一个有效日期

        例如,2007-03-31减去一个月将导致无效日期2007-02-31。 而不是返回无效结果,而是选择该月的最后一个有效日期,即2007-02-28。

        此实例是不可变的,不受此方法调用的影响。

        参数
        months - 减去的月份,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,减去的月份,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • minusWeeks

        public OffsetDateTime minusWeeks​(long weeks)
        返回此OffsetDateTime的副本,并减去指定的周数。

        此方法在几天内从减去月份和年份字段的天数字段中减去指定的金额,以确保结果保持有效。 结果仅在超过最大/最小年份时无效。

        例如,2009-01-07减去一周将导致2008-12-31。

        此实例是不可变的,不受此方法调用的影响。

        参数
        weeks - 减去的周数,可能是负数
        结果
        基于此日期时间的 OffsetDateTime减去周数,而不是空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • minusDays

        public OffsetDateTime minusDays​(long days)
        返回此OffsetDateTime的副本,并减去指定的天数。

        此方法从日期字段中减去指定的金额,根据需要减少月份和年份字段,以确保结果保持有效。 结果仅在超过最大/最小年份时无效。

        例如,2009-01-01减去一天将导致2008-12-31。

        此实例是不可变的,不受此方法调用的影响。

        参数
        days - 减去的日子,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,减去天数,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • minusHours

        public OffsetDateTime minusHours​(long hours)
        返回此OffsetDateTime的副本,并减去指定的小时数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        hours - 减去的小时数,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,减去小时数,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • minusMinutes

        public OffsetDateTime minusMinutes​(long minutes)
        返回此OffsetDateTime的副本,并减去指定的分钟数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        minutes - 要减去的分钟数,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,减去分钟数,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • minusSeconds

        public OffsetDateTime minusSeconds​(long seconds)
        返回此OffsetDateTime的副本,并减去指定的秒数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        seconds - 要减去的秒数,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,减去秒数,不为空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • minusNanos

        public OffsetDateTime minusNanos​(long nanos)
        返回此OffsetDateTime的副本,减去指定的纳秒数。

        此实例是不可变的,不受此方法调用的影响。

        参数
        nanos - 减去 nanos ,可能是负数
        结果
        基于此日期时间的 OffsetDateTime ,减去纳秒,而不是空
        异常
        DateTimeException - 如果结果超出支持的日期范围
      • query

        public <R> R query​(TemporalQuery<R> query)
        使用指定的查询查询此日期时间。

        这将使用指定的查询策略对象查询此日期时间。 TemporalQuery对象定义用于获取结果的逻辑。 阅读查询文档以了解此方法的结果。

        通过在指定的查询上调用TemporalQuery.queryFrom(TemporalAccessor)方法作为参数传递this来获得此方法的结果。

        Specified by:
        query ,界面 TemporalAccessor
        参数类型
        R - 结果的类型
        参数
        query - 要调用的查询,而不是null
        结果
        查询结果,可以返回null(由查询定义)
        异常
        DateTimeException - 如果无法查询(由查询定义)
        ArithmeticException - 如果发生数字溢出(由查询定义)
      • until

        public long until​(Temporal endExclusive,
                          TemporalUnit unit)
        根据指定的单位计算到另一个日期时间的时间量。

        这将根据单个TemporalUnit计算两个OffsetDateTime对象之间的时间量。 起点和终点是this和指定的日期时间。 如果结束在开始之前,结果将是否定的。 例如,可以使用startDateTime.until(endDateTime, DAYS)计算两个日期时间之间的天startDateTime.until(endDateTime, DAYS)

        所述Temporal传递给此方法被转换为OffsetDateTime使用from(TemporalAccessor) 如果两个日期时间之间的偏移量不同,则指定的结束日期时间将标准化为与此日期时间具有相同的偏移量。

        计算返回一个整数,表示两个日期之间的完整单位数。 例如,2012-06-15T00:00Z和2012-08-14T23:59Z之间的月份数量仅为一个月,因为它比两个月短一分钟。

        使用此方法有两种等效方法。 第一种是调用此方法。 第二种是使用TemporalUnit.between(Temporal, Temporal)

          // these two lines are equivalent
           amount = start.until(end, MONTHS);
           amount = MONTHS.between(start, end); 
        应该根据哪个使代码更具可读性来做出选择。

        计算在ChronoUnit此方法中实现 单位NANOSMICROSMILLISSECONDSMINUTESHOURSHALF_DAYSDAYSWEEKSMONTHSYEARSDECADESCENTURIESMILLENNIAERAS支持。 其他ChronoUnit值将引发异常。

        如果该单元不是ChronoUnit ,则此方法的结果是通过调用获得TemporalUnit.between(Temporal, Temporal)传递this作为第一个参数和转换后的输入时间作为第二个参数。

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        until在接口 Temporal
        参数
        endExclusive - 结束日期,独占,转换为 OffsetDateTime ,不为空
        unit - 计量金额的单位,而不是空
        结果
        此日期时间与结束日期时间之间的时间量
        异常
        DateTimeException - 如果金额无法计算,或者结束时间不能转换为 OffsetDateTime
        UnsupportedTemporalTypeException - 如果不支持该装置
        ArithmeticException - 如果发生数字溢出
      • format

        public String format​(DateTimeFormatter formatter)
        使用指定的格式化程序格式化此日期时间。

        此日期时间将传递给格式化程序以生成字符串。

        参数
        formatter - 要使用的格式化程序,不为null
        结果
        格式化的日期时间字符串,不为空
        异常
        DateTimeException - 如果在打印期间发生错误
      • atZoneSameInstant

        public ZonedDateTime atZoneSameInstant​(ZoneId zone)
        将此日期时间与时区组合以创建ZonedDateTime ,以确保结果具有相同的瞬间。

        这将返回由此日期时间和指定时区组成的ZonedDateTime 此转换将忽略可见的本地日期时间,而是使用基础时刻。 这避免了局部时间线间隙或重叠的任何问题。 结果可能具有不同的值,例如小时,分钟和偶数天。

        要尝试保留字段的值,请使用atZoneSimilarLocal(ZoneId) 要将偏移量用作区域ID,请使用toZonedDateTime()

        参数
        zone - 要使用的时区,不是null
        结果
        从此日期时间形成的分区日期时间,而不是null
      • atZoneSimilarLocal

        public ZonedDateTime atZoneSimilarLocal​(ZoneId zone)
        将此日期时间与时区组合以创建ZonedDateTime尝试保持相同的本地日期和时间。

        这将返回由此日期时间和指定时区组成的ZonedDateTime 在可能的情况下,结果将具有与此对象相同的本地日期时间。

        时区规则(例如夏令时)意味着并非每次都在本地时间线上存在。 如果本地日期时间根据规则处于间隙或重叠,则使用解析器来确定结果本地时间和偏移。 如果可能,此方法使用ZonedDateTime.ofLocal(LocalDateTime, ZoneId, ZoneOffset)来保留此实例的偏移量。

        可以通过两种方式更好地控制间隙和重叠。 如果您只想在重叠时使用后面的偏移量,请在此方法后立即调用ZonedDateTime.withLaterOffsetAtOverlap()

        要在同一时刻创建分区日期时间而不考虑本地时间线,请使用atZoneSameInstant(ZoneId) 要将偏移量用作区域ID,请使用toZonedDateTime()

        参数
        zone - 要使用的时区,不是null
        结果
        从此日期开始的分区日期时间和区域的最早有效时间,不为空
      • toOffsetTime

        public OffsetTime toOffsetTime()
        将此日期时间转换为OffsetTime

        这将返回具有相同本地时间和偏移量的偏移时间。

        结果
        表示时间和偏移量的OffsetTime,不为null
      • toZonedDateTime

        public ZonedDateTime toZonedDateTime()
        使用偏移量作为区域ID将此日期时间转换为ZonedDateTime

        这使用偏移作为区域ID创建了最简单的ZonedDateTime

        要控制使用的时区,请参阅atZoneSameInstant(ZoneId)atZoneSimilarLocal(ZoneId)

        结果
        分区日期时间,表示相同的本地日期时间和偏移量,不为空
      • toInstant

        public Instant toInstant()
        将此日期时间转换为Instant

        这将返回Instant表示时间线上与此日期时间相同的点。

        结果
        Instant表示同一时刻,不为空
      • toEpochSecond

        public long toEpochSecond()
        将此日期时间转换为1970-01-01T00:00:00Z纪元的秒数。

        这允许将此日期时间转换为epoch-seconds字段的值。 这主要用于低级转换,而不是一般的应用程序使用。

        结果
        1970-01-01T00:00:00Z时代的秒数
      • compareTo

        public int compareTo​(OffsetDateTime other)
        将此日期时间与另一个日期时间进行比较。

        比较基于本地日期时间的瞬间。 它与“等于”一致,如Comparable所定义。

        例如,以下是比较器顺序:

        1. 2008-12-03T10:30+01:00
        2. 2008-12-03T11:00+01:00
        3. 2008-12-03T12:00+02:00
        4. 2008-12-03T11:30+01:00
        5. 2008-12-03T12:00+01:00
        6. 2008-12-03T12:30+01:00
        值#2和#3表示时间线上的相同瞬间。 当两个值表示同一时刻时,将比较本地日期时间以区分它们。 需要执行此步骤以使排序与equals()一致。
        Specified by:
        compareTo在接口 Comparable<OffsetDateTime>
        参数
        other - 要比较的其他日期时间,而不是null
        结果
        比较器值,如果更小则为负,如果更大则为正
      • isAfter

        public boolean isAfter​(OffsetDateTime other)
        检查此日期时间的瞬间是否在指定日期时间之后。

        该方法与compareTo(java.time.OffsetDateTime)equals(java.lang.Object)中的比较的不同之处在于它仅比较日期时间的瞬间。 这相当于使用dateTime1.toInstant().isAfter(dateTime2.toInstant());

        参数
        other - 要比较的其他日期时间,而不是null
        结果
        如果这是在指定日期时间之后,则为true
      • isBefore

        public boolean isBefore​(OffsetDateTime other)
        检查此日期时间的瞬间是否在指定日期时间之前。

        该方法与compareTo(java.time.OffsetDateTime)中的比较的不同之处在于它仅比较日期时间的瞬间。 这相当于使用dateTime1.toInstant().isBefore(dateTime2.toInstant());

        参数
        other - 要比较的其他日期时间,而不是null
        结果
        如果它在指定日期时间之前,则为true
      • isEqual

        public boolean isEqual​(OffsetDateTime other)
        检查此日期时间的瞬间是否等于指定日期时间的瞬间。

        该方法与compareTo(java.time.OffsetDateTime)equals(java.lang.Object)中的比较的不同之处在于它仅比较日期时间的瞬间。 这相当于使用dateTime1.toInstant().equals(dateTime2.toInstant());

        参数
        other - 要比较的其他日期时间,而不是null
        结果
        如果瞬间等于指定日期时间的瞬间,则为true
      • equals

        public boolean equals​(Object obj)
        检查此日期时间是否等于另一个日期时间。

        比较基于本地日期时间和偏移量。 要比较时间线上的同一时刻,请使用isEqual(java.time.OffsetDateTime) 仅比较类型为OffsetDateTime对象,其他类型返回false。

        重写:
        equals在课程 Object
        参数
        obj - 要检查的对象,null返回false
        结果
        如果这等于其他日期时间,则为true
        另请参见:
        Object.hashCode()HashMap
      • toString

        public String toString()
        将此日期时间输出为String ,例如2007-12-03T10:15:30+01:00

        输出将是以下ISO-8601格式之一:

        • 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
        使用的格式将是最短的,输出省略的部分隐含为零的时间的完整值。
        重写:
        toString ,课程 Object
        结果
        此日期时间的字符串表示形式,不为null