Class Almanac

Direct Known Subclasses:
Calendars

public class Almanac extends Resolver
日期计算类
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • Almanac

      public Almanac()
  • Method Details

    • isIn

      public static boolean isIn(TemporalAccessor date, TemporalAccessor beginDate, TemporalAccessor endDate)
      当前日期是否在日期指定范围内 起始日期和结束日期可以互换
      Parameters:
      date - 被检查的日期
      beginDate - 起始日期(包含)
      endDate - 结束日期(包含)
      Returns:
      是否在范围内
    • isIn

      public static boolean isIn(TemporalAccessor date, TemporalAccessor beginDate, TemporalAccessor endDate, boolean includeBegin, boolean includeEnd)
      当前日期是否在日期指定范围内 起始日期和结束日期可以互换 通过includeBegin, includeEnd参数控制日期范围区间是否为开区间,例如:传入参数:includeBegin=true, includeEnd=false, 则本方法会判断 date ∈ (beginDate, endDate] 是否成立
      Parameters:
      date - 被检查的日期
      beginDate - 起始日期
      endDate - 结束日期
      includeBegin - 时间范围是否包含起始日期
      includeEnd - 时间范围是否包含结束日期
      Returns:
      是否在范围内
    • offset

      public static LocalDateTime offset(LocalDateTime time, long number, TemporalUnit field)
      日期偏移,根据field不同加不同值(偏移会修改传入的对象)
      Parameters:
      time - LocalDateTime
      number - 偏移量,正数为向后偏移,负数为向前偏移
      field - 偏移单位,见ChronoUnit,不能为null
      Returns:
      偏移后的日期时间
    • between

      public static Duration between(LocalDateTime startTimeInclude, LocalDateTime endTimeExclude)
      获取两个日期的差,如果结束时间早于开始时间,获取结果为负 返回结果为Duration对象,通过调用toXXX方法返回相差单位
      Parameters:
      startTimeInclude - 开始时间(包含)
      endTimeExclude - 结束时间(不包含)
      Returns:
      时间差 Duration对象
      See Also:
    • between

      public static long between(LocalDateTime startTimeInclude, LocalDateTime endTimeExclude, ChronoUnit unit)
      获取两个日期的差,如果结束时间早于开始时间,获取结果为负 返回结果为时间差的long值
      Parameters:
      startTimeInclude - 开始时间(包括)
      endTimeExclude - 结束时间(不包括)
      unit - 时间差单位
      Returns:
      时间差
    • betweenPeriod

      public static Period betweenPeriod(LocalDate startTimeInclude, LocalDate endTimeExclude)
      获取两个日期的表象时间差,如果结束时间早于开始时间,获取结果为负。 比如2011年2月1日,和2021年8月11日,日相差了10天,月相差6月
      Parameters:
      startTimeInclude - 开始时间(包括)
      endTimeExclude - 结束时间(不包括)
      Returns:
      时间差
    • beginOfDay

      public static LocalDateTime beginOfDay(LocalDateTime time)
      修改为一天的开始时间,例如:2020-02-02 00:00:00,000
      Parameters:
      time - 日期时间
      Returns:
      一天的开始时间
    • endOfDay

      public static LocalDateTime endOfDay(LocalDateTime time, boolean truncateMillisecond)
      修改为一天的结束时间,例如:
      • 毫秒不归零:2020-02-02 23:59:59,999
      • 毫秒归零:2020-02-02 23:59:59,000
      Parameters:
      time - 日期时间
      truncateMillisecond - 是否毫秒归零
      Returns:
      一天的结束时间
    • beginOfMonth

      public static LocalDateTime beginOfMonth(LocalDateTime time)
      修改为月初的开始时间,例如:2020-02-01 00:00:00,000
      Parameters:
      time - 日期时间
      Returns:
      月初的开始时间
    • endOfMonth

      public static LocalDateTime endOfMonth(LocalDateTime time, boolean truncateMillisecond)
      修改为月底的结束时间
      Parameters:
      time - 日期时间
      truncateMillisecond - 是否毫秒归零
      Returns:
      月底的结束时间
    • beginOfYear

      public static LocalDateTime beginOfYear(LocalDateTime time)
      修改为一年的开始时间,例如:2020-01-01 00:00:00,000
      Parameters:
      time - 日期时间
      Returns:
      一年的开始时间
    • endOfYear

      public static LocalDateTime endOfYear(LocalDateTime time, boolean truncateMillisecond)
      修改为一年的结束时间
      Parameters:
      time - 日期时间
      truncateMillisecond - 是否毫秒归零
      Returns:
      一年的结束时间
    • isWeekend

      public static boolean isWeekend(LocalDateTime localDateTime)
      是否为周末(周六或周日)
      Parameters:
      localDateTime - 判定的日期LocalDateTime
      Returns:
      是否为周末(周六或周日)
    • isWeekend

      public static boolean isWeekend(LocalDate localDate)
      是否为周末(周六或周日)
      Parameters:
      localDate - 判定的日期LocalDate
      Returns:
      是否为周末(周六或周日)
    • dayOfWeek

      public static Fields.Week dayOfWeek(LocalDate localDate)
      获取LocalDate对应的星期值
      Parameters:
      localDate - 日期LocalDate
      Returns:
      Fields.Week
    • isOverlap

      public static boolean isOverlap(ChronoLocalDateTime<?> realStartTime, ChronoLocalDateTime<?> realEndTime, ChronoLocalDateTime<?> startTime, ChronoLocalDateTime<?> endTime)
      检查两个时间段是否有时间重叠 重叠指两个时间段是否有交集,注意此方法时间段重合时如:
      • 此方法未纠正开始时间小于结束时间
      • 当realStartTime和realEndTime或startTime和endTime相等时,退化为判断区间是否包含点
      • 当realStartTime和realEndTime和startTime和endTime相等时,退化为判断点与点是否相等
      See 准确的区间关系参考:艾伦区间代数
      Parameters:
      realStartTime - 第一个时间段的开始时间
      realEndTime - 第一个时间段的结束时间
      startTime - 第二个时间段的开始时间
      endTime - 第二个时间段的结束时间
      Returns:
      true 表示时间有重合
    • weekOfYear

      public static int weekOfYear(TemporalAccessor date)
      获得指定日期是所在年份的第几周,如:
      • 如果一年的第一天是星期一,则第一周从第一天开始,没有零周
      • 如果一年的第二天是星期一,则第一周从第二天开始,而第一天在零周
      • 如果一年的第4天是星期一,则第一周从第4天开始,第1至第3天在零周
      • 如果一年的第5天是星期一,则第二周从第5天开始,第1至第4天在第一周
      Parameters:
      date - 日期(LocalDate 或者 LocalDateTime等)
      Returns:
      所在年的第几周
    • isSameDay

      public static boolean isSameDay(ChronoLocalDateTime<?> date1, ChronoLocalDateTime<?> date2)
      比较两个日期是否为同一天
      Parameters:
      date1 - 日期1
      date2 - 日期2
      Returns:
      是否为同一天
    • isSameDay

      public static boolean isSameDay(ChronoLocalDate date1, ChronoLocalDate date2)
      比较两个日期是否为同一天
      Parameters:
      date1 - 日期1
      date2 - 日期2
      Returns:
      是否为同一天
    • offset

      public static <T extends Temporal> T offset(T time, long number, TemporalUnit field)
      日期偏移,根据field不同加不同值(偏移会修改传入的对象)
      Type Parameters:
      T - 日期类型,如LocalDate或LocalDateTime
      Parameters:
      time - Temporal
      number - 偏移量,正数为向后偏移,负数为向前偏移
      field - 偏移单位,见ChronoUnit,不能为null
      Returns:
      偏移后的日期时间
    • between

      public static Duration between(Temporal startTimeInclude, Temporal endTimeExclude)
      获取两个日期的差,如果结束时间早于开始时间,获取结果为负。

      返回结果为Duration对象,通过调用toXXX方法返回相差单位

      Parameters:
      startTimeInclude - 开始时间(包含)
      endTimeExclude - 结束时间(不包含)
      Returns:
      时间差 Duration对象
    • between

      public static long between(Temporal startTimeInclude, Temporal endTimeExclude, ChronoUnit unit)
      获取两个日期的差,如果结束时间早于开始时间,获取结果为负。 返回结果为时间差的long值
      Parameters:
      startTimeInclude - 开始时间(包括)
      endTimeExclude - 结束时间(不包括)
      unit - 时间差单位
      Returns:
      时间差
    • offset

      public <T extends Temporal> T offset(T temporal, DayOfWeek dayOfWeek, boolean isPrevious)
      偏移到指定的周几
      Type Parameters:
      T - 日期类型,如LocalDate或LocalDateTime
      Parameters:
      temporal - 日期或者日期时间
      dayOfWeek - 周几
      isPrevious - 是否向前偏移,true向前偏移,false向后偏移。
      Returns:
      偏移后的日期