Class Calendar

Direct Known Subclasses:
DateKit

public class Calendar extends Calculate
针对Calendar 对象封装工具类
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • Calendar

      public Calendar()
  • Method Details

    • isAM

      public static boolean isAM(Calendar calendar)
      是否为上午
      Parameters:
      calendar - Calendar
      Returns:
      是否为上午
    • isPM

      public static boolean isPM(Calendar calendar)
      是否为下午
      Parameters:
      calendar - Calendar
      Returns:
      是否为下午
    • isSameDay

      public static boolean isSameDay(Calendar cal1, Calendar cal2)
      比较两个日期是否为同一天
      Parameters:
      cal1 - 日期1
      cal2 - 日期2
      Returns:
      是否为同一天
    • isSameWeek

      public static boolean isSameWeek(Calendar cal1, Calendar cal2, boolean isMon)
      比较两个日期是否为同一周 同一个周的意思是:ERA(公元)、year(年)、month(月)、week(周)都一致。
      Parameters:
      cal1 - 日期1
      cal2 - 日期2
      isMon - 一周的第一天是否为周一。国内第一天为星期一,国外第一天为星期日
      Returns:
      是否为同一周
    • isSameMonth

      public static boolean isSameMonth(Calendar cal1, Calendar cal2)
      比较两个日期是否为同一月 同一个月的意思是:ERA(公元)、year(年)、month(月)都一致。
      Parameters:
      cal1 - 日期1
      cal2 - 日期2
      Returns:
      是否为同一月
    • isSameYear

      public static boolean isSameYear(Calendar cal1, Calendar cal2)
      比较两个日期是否为同一年 同一个年的意思是:ERA(公元)、year(年)都一致。
      Parameters:
      cal1 - 日期1
      cal2 - 日期2
      Returns:
      是否为同一年
    • isSameInstant

      public static boolean isSameInstant(Calendar date1, Calendar date2)
      检查两个Calendar时间戳是否相同 此方法检查两个Calendar的毫秒数时间戳是否相同
      Parameters:
      date1 - 时间1
      date2 - 时间2
      Returns:
      两个Calendar时间戳是否相同。如果两个时间都为null返回true,否则有null返回false
    • isFirstDayOfMonth

      public static boolean isFirstDayOfMonth(Calendar calendar)
      是否为本月第一天
      Parameters:
      calendar - Calendar
      Returns:
      是否为本月最后一天
    • isLastDayOfMonth

      public static boolean isLastDayOfMonth(Calendar calendar)
      是否为本月最后一天
      Parameters:
      calendar - Calendar
      Returns:
      是否为本月最后一天
    • calendar

      public static Calendar calendar()
      创建Calendar对象,时间为默认时区的当前时间
      Returns:
      Calendar对象
    • calendar

      public static Calendar calendar(Date date)
      转换为Calendar对象
      Parameters:
      date - 日期对象
      Returns:
      Calendar对象
    • calendar

      public static Calendar calendar(XMLGregorianCalendar calendar)
      转换为Calendar对象
      Parameters:
      calendar - 日期对象
      Returns:
      Calendar对象
    • calendar

      public static Calendar calendar(long millis)
      转换为Calendar对象,使用当前默认时区
      Parameters:
      millis - 时间戳
      Returns:
      Calendar对象
    • calendar

      public static Calendar calendar(long millis, TimeZone timeZone)
      转换为Calendar对象
      Parameters:
      millis - 时间戳
      timeZone - 时区
      Returns:
      Calendar对象
    • calendar

      public static Calendar calendar(Calendar calendar, TimeZone timeZone)
      转换为指定时区的Calendar,返回新的Calendar
      Parameters:
      calendar - 时间
      timeZone - 新时区
      Returns:
      指定时区的新的calendar对象
    • truncate

      public static Calendar truncate(Calendar calendar, Various various)
      修改日期为某个时间字段起始时间
      Parameters:
      calendar - Calendar
      various - 保留到的时间字段,如定义为 Various.SECOND,表示这个字段不变,这个字段以下字段全部归0
      Returns:
      Calendar
    • round

      public static Calendar round(Calendar calendar, Various various)
      修改日期为某个时间字段四舍五入时间
      Parameters:
      calendar - Calendar
      various - 时间字段,即保留到哪个日期字段
      Returns:
      Calendar
    • ceiling

      public static Calendar ceiling(Calendar calendar, Various various)
      修改日期为某个时间字段结束时间
      Parameters:
      calendar - Calendar
      various - 保留到的时间字段,如定义为 Various.SECOND,表示这个字段不变,这个字段以下字段全部取最大值
      Returns:
      Calendar
    • ceiling

      public static Calendar ceiling(Calendar calendar, Various various, boolean truncateMillisecond)
      修改日期为某个时间字段结束时间 可选是否归零毫秒。

      有时候由于毫秒部分必须为0(如MySQL数据库中),因此在此加上选项。

      Parameters:
      calendar - Calendar
      various - 时间字段
      truncateMillisecond - 是否毫秒归零
      Returns:
      Calendar
    • beginOfSecond

      public static Calendar beginOfSecond(Calendar calendar)
      修改秒级别的开始时间,即忽略毫秒部分
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfSecond

      public static Calendar endOfSecond(Calendar calendar)
      修改秒级别的结束时间,即毫秒设置为999
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • beginOfHour

      public static Calendar beginOfHour(Calendar calendar)
      修改某小时的开始时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfHour

      public static Calendar endOfHour(Calendar calendar)
      修改某小时的结束时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • beginOfMinute

      public static Calendar beginOfMinute(Calendar calendar)
      修改某分钟的开始时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfMinute

      public static Calendar endOfMinute(Calendar calendar)
      修改某分钟的结束时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • beginOfDay

      public static Calendar beginOfDay(Calendar calendar)
      修改某天的开始时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfDay

      public static Calendar endOfDay(Calendar calendar)
      修改某天的结束时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • beginOfWeek

      public static Calendar beginOfWeek(Calendar calendar)
      修改给定日期当前周的开始时间,周一定为一周的开始时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • beginOfWeek

      public static Calendar beginOfWeek(Calendar calendar, boolean isMondayAsFirstDay)
      修改给定日期当前周的开始时间
      Parameters:
      calendar - 日期 Calendar
      isMondayAsFirstDay - 是否周一做为一周的第一天(false表示周日做为第一天)
      Returns:
      Calendar
    • endOfWeek

      public static Calendar endOfWeek(Calendar calendar)
      修改某周的结束时间,周日定为一周的结束
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfWeek

      public static Calendar endOfWeek(Calendar calendar, boolean isSundayAsLastDay)
      修改某周的结束时间
      Parameters:
      calendar - 日期 Calendar
      isSundayAsLastDay - 是否周日做为一周的最后一天(false表示周六做为最后一天)
      Returns:
      Calendar
    • beginOfMonth

      public static Calendar beginOfMonth(Calendar calendar)
      修改某月的开始时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfMonth

      public static Calendar endOfMonth(Calendar calendar)
      修改某月的结束时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • beginOfQuarter

      public static Calendar beginOfQuarter(Calendar calendar)
      修改某季度的开始时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfQuarter

      public static Calendar endOfQuarter(Calendar calendar)
      获取某季度的结束时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • beginOfYear

      public static Calendar beginOfYear(Calendar calendar)
      修改某年的开始时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • endOfYear

      public static Calendar endOfYear(Calendar calendar)
      修改某年的结束时间
      Parameters:
      calendar - 日期 Calendar
      Returns:
      Calendar
    • yearAndQuarter

      public static String yearAndQuarter(Calendar cal)
      获得指定日期年份和季度 格式:[20131]表示2013年第一季度
      Parameters:
      cal - 日期
      Returns:
      年和季度,格式类似于20131
    • getBeginValue

      public static int getBeginValue(Calendar calendar, Various various)
      获取指定日期字段的最小值,例如分钟的最小值是0
      Parameters:
      calendar - Calendar
      various - Various
      Returns:
      字段最小值
      See Also:
    • getBeginValue

      public static int getBeginValue(Calendar calendar, int dateField)
      获取指定日期字段的最小值,例如分钟的最小值是0
      Parameters:
      calendar - Calendar
      dateField - Various
      Returns:
      字段最小值
      See Also:
    • getEndValue

      public static int getEndValue(Calendar calendar, Various various)
      获取指定日期字段的最大值,例如分钟的最大值是59
      Parameters:
      calendar - Calendar
      various - Various
      Returns:
      字段最大值
      See Also:
    • getEndValue

      public static int getEndValue(Calendar calendar, int dateField)
      获取指定日期字段的最大值,例如分钟的最大值是59
      Parameters:
      calendar - Calendar
      dateField - Various
      Returns:
      字段最大值
      See Also:
    • getField

      public static int getField(Calendar calendar, Various field)
      获得日期的某个部分 例如获得年的部分,则使用 getField(DatePart.YEAR)
      Parameters:
      calendar - Calendar
      field - 表示日期的哪个部分的枚举 Various
      Returns:
      某个部分的值
    • toInstant

      public static Instant toInstant(Calendar calendar)
      CalendarInstant对象
      Parameters:
      calendar - Date对象
      Returns:
      Instant对象
    • toLocalDateTime

      public static LocalDateTime toLocalDateTime(Calendar calendar)
      Calendar 转换为 LocalDateTime,使用系统默认时区
      Parameters:
      calendar - Calendar
      Returns:
      LocalDateTime
    • compare

      public static int compare(Calendar calendar1, Calendar calendar2)
      null安全的Calendar比较,null小于任何日期
      Parameters:
      calendar1 - 日期1
      calendar2 - 日期2
      Returns:
      比较结果,如果calendar1 < calendar2,返回数小于0,calendar1==calendar2返回0,calendar1 > calendar2 大于0
    • formatChineseDate

      public static String formatChineseDate(Calendar calendar, boolean withTime)
      将指定Calendar时间格式化为纯中文形式,比如:
           2018-02-24 12:13:14 转换为 二〇一八年二月二十四日(withTime为false)
           2018-02-24 12:13:14 转换为 二〇一八年二月二十四日十二时十三分十四秒(withTime为true)
       
      Parameters:
      calendar - Calendar
      withTime - 是否包含时间部分
      Returns:
      格式化后的字符串
    • parseByPatterns

      public static Calendar parseByPatterns(CharSequence text, String... parsePatterns) throws DateException
      通过给定的日期格式解析日期时间字符串。 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象,否则抛出DateException异常。 方法来自:Apache Commons-Lang3
      Parameters:
      text - 日期时间字符串,非空
      parsePatterns - 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
      Returns:
      解析后的Calendar
      Throws:
      IllegalArgumentException - 如果日期字符串或模式数组为空
      DateException - 如果没有合适的日期模式
    • parseByPatterns

      public static Calendar parseByPatterns(CharSequence text, Locale locale, String... parsePatterns) throws DateException
      通过给定的日期格式解析日期时间字符串。 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象,否则抛出DateException异常。 方法来自:Apache Commons-Lang3
      Parameters:
      text - 日期时间字符串,非空
      locale - 地区,当为null时使用Locale.getDefault()
      parsePatterns - 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
      Returns:
      解析后的Calendar
      Throws:
      IllegalArgumentException - 如果日期字符串或模式数组为空
      DateException - 如果没有合适的日期模式
    • parseByPatterns

      public static Calendar parseByPatterns(CharSequence text, Locale locale, boolean lenient, String... parsePatterns) throws DateException
      通过给定的日期格式解析日期时间字符串。 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象,否则抛出DateException异常。 方法来自:Apache Commons-Lang3
      Parameters:
      text - 日期时间字符串,非空
      locale - 地区,当为null时使用Locale.getDefault()
      lenient - 日期时间解析是否使用严格模式
      parsePatterns - 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
      Returns:
      解析后的Calendar
      Throws:
      IllegalArgumentException - 如果日期字符串或模式数组为空
      DateException - 如果没有合适的日期模式
      See Also:
    • parse

      public static Calendar parse(CharSequence text, boolean lenient, PositionDateParser parser)
      使用指定DateParser解析字符串为Calendar
      Parameters:
      text - 日期字符串
      lenient - 是否宽容模式
      parser - DateParser
      Returns:
      解析后的 Calendar,解析失败返回null
    • age

      public static int age(LocalDate birthDay)
      计算年龄
      Parameters:
      birthDay - 生日
      Returns:
      int 年龄
    • age

      public static int age(LocalDateTime birthDay)
      计算年龄
      Parameters:
      birthDay - 生日
      Returns:
      int 年龄
    • age

      public static int age(Calendar birthday, Calendar dateToCompare)
      计算相对于dateToCompare的年龄,常用于计算指定生日在某年的年龄 按照《最高人民法院关于审理未成年人刑事案件具体应用法律若干问题的解释》第二条规定刑法第十七条规定的“周岁”,按照公历的年、月、日计算,从周岁生日的第二天起算。
      • 2022-03-01出生,则相对2023-03-01,周岁为0,相对于2023-03-02才是1岁。
      • 1999-02-28出生,则相对2000-02-29,周岁为1
      Parameters:
      birthday - 生日
      dateToCompare - 需要对比的日期
      Returns:
      年龄
    • age

      protected static int age(long birthday, long dateToCompare)
      计算相对于dateToCompare的年龄(周岁),常用于计算指定生日在某年的年龄 按照《最高人民法院关于审理未成年人刑事案件具体应用法律若干问题的解释》第二条规定刑法第十七条规定的“周岁”,按照公历的年、月、日计算,从周岁生日的第二天起算。
      • 2022-03-01出生,则相对2023-03-01,周岁为0,相对于2023-03-02才是1岁。
      • 1999-02-28出生,则相对2000-02-29,周岁为1
      Parameters:
      birthday - 生日
      dateToCompare - 需要对比的日期
      Returns:
      年龄