模块  java.base
软件包  java.time.temporal

Class TemporalAdjusters


  • public final class TemporalAdjusters
    extends Object
    常用且有用的TemporalAdjusters。

    调节器是修改时态对象的关键工具。 它们的存在是为了使调整过程外化,允许根据战略设计模式采用不同的方法。 示例可能是设置日期避免周末的调整器,或者将日期设置为月份的最后一天的调整器。

    有两种使用TemporalAdjuster等效方法。 第一种是直接在界面上调用方法。 第二种是使用Temporal.with(TemporalAdjuster)

      // these two lines are equivalent, but the second approach is recommended
       temporal = thisAdjuster.adjustInto(temporal);
       temporal = temporal.with(thisAdjuster); 
    建议使用第二种方法with(TemporalAdjuster) ,因为在代码中读取它会更加清晰。

    该类包含一组标准的调整器,可用作静态方法。 这些包括:

    • 找到该月的第一天或最后一天
    • 找到下个月的第一天
    • 找到一年中的第一天或最后一天
    • 找到明年的第一天
    • 在一个月内找到第一天或最后一天,例如“六月的第一个星期三”
    • 找到下一个或上一个星期的某一天,例如“下周四”
    实现要求:
    静态方法提供的所有实现都是不可变的。
    从以下版本开始:
    1.8
    另请参见:
    TemporalAdjuster
    • 方法详细信息

      • ofDateAdjuster

        public static TemporalAdjuster ofDateAdjuster​(UnaryOperator<LocalDate> dateBasedAdjuster)
        获得包裹日期调整器的TemporalAdjuster

        TemporalAdjuster基于低级别Temporal接口。 此方法允许从LocalDate调整到LocalDate以匹配基于时间的界面。 这是为了方便用户编写的调整器而提供的。

        通常,用户编写的调整器应该是静态常量:

           static TemporalAdjuster TWO_DAYS_LATER = TemporalAdjusters.ofDateAdjuster(date -> date.plusDays(2));  
        参数
        dateBasedAdjuster - 基于日期的调整器,不为null
        结果
        时间调整器包装在日期调整器上,而不是null
      • firstDayOfMonth

        public static TemporalAdjuster firstDayOfMonth()
        返回“第一天的月份”调整程序,它返回设置为当前月份第一天的新日期。

        ISO日历系统的行为如下:
        输入2011-01-15将返回2011-01-01。
        输入2011-02-15将返回2011-02-01。

        该行为适用于大多数日历系统。 它相当于:

          temporal.with(DAY_OF_MONTH, 1); 
        结果
        第一天的调整器,不是空的
      • lastDayOfMonth

        public static TemporalAdjuster lastDayOfMonth()
        返回“最后一天”调整器,它返回设置为当前月份最后一天的新日期。

        ISO日历系统的行为如下:
        输入2011-01-15将返回2011-01-31。
        输入2011-02-15将返回2011-02-28。
        输入2012-02-15将返回2012-02-29(闰年)。
        输入2011-04-15将返回2011-04-30。

        该行为适用于大多数日历系统。 它相当于:

          long lastDay = temporal.range(DAY_OF_MONTH).getMaximum();
          temporal.with(DAY_OF_MONTH, lastDay); 
        结果
        最后一天的调整器,不是空的
      • firstDayOfNextMonth

        public static TemporalAdjuster firstDayOfNextMonth()
        返回“下个月的第一天”调整程序,它返回设置为下个月第一天的新日期。

        ISO日历系统的行为如下:
        输入2011-01-15将返回2011-02-01。
        输入2011-02-15将返回2011-03-01。

        该行为适用于大多数日历系统。 它相当于:

          temporal.with(DAY_OF_MONTH, 1).plus(1, MONTHS); 
        结果
        下个月调整员的第一天,不是空的
      • firstDayOfYear

        public static TemporalAdjuster firstDayOfYear()
        返回“年中的第一天”调整程序,它返回设置为当前年度第一天的新日期。

        ISO日历系统的行为如下:
        输入2011-01-15将返回2011-01-01。
        输入2011-02-15将返回2011-01-01。

        该行为适用于大多数日历系统。 它相当于:

          temporal.with(DAY_OF_YEAR, 1); 
        结果
        第一天的调整员,不是空的
      • lastDayOfYear

        public static TemporalAdjuster lastDayOfYear()
        返回“年末的最后一天”调整器,它返回设置为当前年度最后一天的新日期。

        ISO日历系统的行为如下:
        输入2011-01-15将返回2011-12-31。
        输入2011-02-15将返回2011-12-31。

        该行为适用于大多数日历系统。 它相当于:

          long lastDay = temporal.range(DAY_OF_YEAR).getMaximum();
          temporal.with(DAY_OF_YEAR, lastDay); 
        结果
        最后一天的调整员,不是空的
      • firstDayOfNextYear

        public static TemporalAdjuster firstDayOfNextYear()
        返回“明年的第一天”调整器,它将新的日期设置为下一年的第一天。

        ISO日历系统的行为如下:
        输入2011-01-15将返回2012-01-01。

        该行为适用于大多数日历系统。 它相当于:

          temporal.with(DAY_OF_YEAR, 1).plus(1, YEARS); 
        结果
        下个月调整员的第一天,不是空的
      • firstInMonth

        public static TemporalAdjuster firstInMonth​(DayOfWeek dayOfWeek)
        返回月份调整器中的第一个,它在同一个月中返回第一个匹配的星期几的新日期。 这用于“三月的第一个星期二”等表达式。

        ISO日历系统的行为如下:
        (星期一)的输入2011-12-15将返回2011-12-05。
        (FRIDAY)的输入2011-12-15将返回2011-12-02。

        该行为适用于大多数日历系统。 它使用DAY_OF_WEEKDAY_OF_MONTH字段和DAYS单位,并假设每周七天。

        参数
        dayOfWeek - 星期几,非空
        结果
        第一个月调整器,不是null
      • lastInMonth

        public static TemporalAdjuster lastInMonth​(DayOfWeek dayOfWeek)
        返回月份调整器中的最后一个,它返回同一个月中与上一个匹配的星期几相关的新日期。 这用于“三月的最后一个星期二”等表达式。

        ISO日历系统的行为如下:
        (星期一)的输入2011-12-15将返回2011-12-26。
        (FRIDAY)的输入2011-12-15将返回2011-12-30。

        该行为适用于大多数日历系统。 它使用DAY_OF_WEEKDAY_OF_MONTH字段和DAYS单位,并假设每周七天。

        参数
        dayOfWeek - 星期几,不为空
        结果
        第一个月调整器,不是null
      • dayOfWeekInMonth

        public static TemporalAdjuster dayOfWeekInMonth​(int ordinal,
                                                        DayOfWeek dayOfWeek)
        返回月份调整器中的星期几,它根据月份返回序号星期几的新日期。 这用于“三月的第二个星期二”等表达式。

        ISO日历系统的行为如下:
        (1,TUESDAY)的输入2011-12-15将于2011-12-06返回。
        (2,星期二)的输入2011-12-15将返回2011-12-13。
        (3,星期二)的输入2011-12-15将返回2011-12-20。
        (4,星期二)的输入2011-12-15将返回2011-12-27。
        (5,星期二)的输入2011-12-15将返回2012-01-03。
        (1,TUESDAY)的输入2011-12-15将返回2011-12-27(月末)。
        ( - 4,星期二)的输入2011-12-15将返回2011-12-06(前一个月的3个星期)。
        ( - 5,星期二)输入2011-12-15将返回2011-11-29(前一个月前4周)。
        (0,星期二)的输入2011-12-15将返回2011-11-29(上个月的最后一个月)。

        对于正序或零序数,该算法相当于找到在该月内匹配的第一个星期几,然后向其添加若干周。 对于负序数,该算法相当于找到在该月内匹配的最后一天,然后减去它的周数。 序数周数未经验证,并且根据此算法宽松地解释。 此定义表示零序数查找上个月中最后一个匹配的星期几。

        该行为适用于大多数日历系统。 它使用DAY_OF_WEEKDAY_OF_MONTH字段和DAYS单位,并假设每周七天。

        参数
        ordinal - 月内的一周,无限制,但通常为-5至5
        dayOfWeek - 星期几,非空
        结果
        月调整器中的星期几,不为空
      • next

        public static TemporalAdjuster next​(DayOfWeek dayOfWeek)
        返回下一个星期几调整器,它将日期调整为调整日期后指定星期几的第一次出现。

        ISO日历系统的行为如下:
        参数(MONDAY)的输入2011-01-15(星期六)将返回2011-01-17(两天后)。
        参数(WEDNESDAY)的输入2011-01-15(星期六)将返回2011-01-19(四天后)。
        参数(星期六)的输入2011-01-15(星期六)将返回2011-01-22(七天后)。

        该行为适用于大多数日历系统。 它使用DAY_OF_WEEK字段和DAYS单位,并假设每周七天。

        参数
        dayOfWeek - 将日期移至的星期几,而不是null
        结果
        下一天的调整器,不是空的
      • nextOrSame

        public static TemporalAdjuster nextOrSame​(DayOfWeek dayOfWeek)
        返回下一个或相同的星期几调整器,它将日期调整为调整日期后指定星期几的第一次出现,除非它已经在那一天,在这种情况下返回相同的对象。

        ISO日历系统的行为如下:
        参数(MONDAY)的输入2011-01-15(星期六)将返回2011-01-17(两天后)。
        参数(WEDNESDAY)的输入2011-01-15(星期六)将返回2011-01-19(四天后)。
        参数(SATURDAY)的输入2011-01-15(星期六)将返回2011-01-15(与输入相同)。

        该行为适用于大多数日历系统。 它使用DAY_OF_WEEK字段和DAYS单位,并假设每周七天。

        参数
        dayOfWeek - 检查或移动日期的星期几,而不是null
        结果
        下周或同一天的调整器,不是空的
      • previous

        public static TemporalAdjuster previous​(DayOfWeek dayOfWeek)
        返回上一周的调整程序,该调整程序将日期调整为调整日期之前指定的星期几的第一次出现。

        ISO日历系统的行为如下:
        参数(MONDAY)的输入2011-01-15(星期六)将返回2011-01-10(五天前)。
        参数(WEDNESDAY)的输入2011-01-15(星期六)将返回2011-01-12(三天前)。
        参数(星期六)的输入2011-01-15(星期六)将返回2011-01-08(七天前)。

        该行为适用于大多数日历系统。 它使用DAY_OF_WEEK字段和DAYS单位,并假设每周七天。

        参数
        dayOfWeek - 将日期移至的星期几,而不是null
        结果
        前一天的调整器,不是空的
      • previousOrSame

        public static TemporalAdjuster previousOrSame​(DayOfWeek dayOfWeek)
        返回上一个或同一个星期几的调整器,它将日期调整为调整日期之前指定的星期几的第一次出现,除非它已经在那一天,在这种情况下返回相同的对象。

        ISO日历系统的行为如下:
        参数(MONDAY)的输入2011-01-15(星期六)将返回2011-01-10(五天前)。
        参数(WEDNESDAY)的输入2011-01-15(星期六)将返回2011-01-12(三天前)。
        参数(SATURDAY)的输入2011-01-15(星期六)将返回2011-01-15(与输入相同)。

        该行为适用于大多数日历系统。 它使用DAY_OF_WEEK字段和DAYS单位,并假设每周七天。

        参数
        dayOfWeek - 检查或移动日期的星期几,而不是null
        结果
        the previous-or-same day-of-week adjuster, not null