All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xkzhangsan.time.calculator.DateTimeCalculatorUtil Maven / Gradle / Ivy

Go to download

xk-time is a datetime converter calculator and formatter tool set, based on java8 date and time API, thread safe, easy to use.

There is a newer version: 3.2.4
Show newest version
package com.xkzhangsan.time.calculator;

import static com.xkzhangsan.time.constants.Constant.MONTHDAY_FORMAT_PRE;

import java.time.DateTimeException;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.MonthDay;
import java.time.Period;
import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.TemporalField;
import java.time.temporal.TemporalUnit;
import java.time.temporal.WeekFields;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

import com.xkzhangsan.time.TemporalAdjusterExtension;
import com.xkzhangsan.time.converter.DateTimeConverterUtil;
import com.xkzhangsan.time.enums.ConstellationNameEnum;
import com.xkzhangsan.time.enums.MonthNameEnum;
import com.xkzhangsan.time.enums.TwelveTwoEnum;
import com.xkzhangsan.time.enums.WeekNameEnum;
import com.xkzhangsan.time.enums.ZoneIdEnum;
import com.xkzhangsan.time.formatter.DateTimeFormatterUtil;
import com.xkzhangsan.time.utils.StringUtil;

/**
 * 日期计算工具类
* 包括:
* 1.获取时间属性方法(支持年月日时分秒毫秒,星期,时间戳等),get* 比如getYear(Date date) 获取年部分,getMonthCnLong(Date date)获取月份中文,getDayOfWeekCn(Date date),获取星期中文
* 2.获取时间加操作方法,plus* 比如plusYears(Date date, long amountToAdd) 当前时间年增加amountToAdd值
* 3.获取时间减操作方法,minus* 比如minusYears(Date date, long amountToSubtract) 当前时间年减少amountToSubtract值
* 4.获取时间修改属性方法,with* 比如withYear(Date date, long newValue) 修改当前时间年值为newValue
* 5.获取比较2个时间方法,between* 比如betweenYears(Date startInclusive, Date endExclusive) 比较2个时间,获取年部分
* 6.其他常用方法,比如isLeapYear(Date date) 判断是否闰年,isWeekend(Date date) 判断是否周末,isExpiry(String yearMonthStr) 是否过期等
* 7.时区转换计算方法,transform*,比如transform(ZonedDateTime zonedDateTime, String zoneId)
* 8.比较2个时间大小和相等方法,compare*,比如compare(Date date1, Date date2)
* 9.获取准确的起始时间方法,start*,end*,比如startTimeOfMonth() 当月起始时间 当月第一天日期+00:00:00 endTimeOfMonth() 当月最后一天日期+23:59:59 精确到秒;endAccuracyTimeOf*,精确到毫秒(Date),精确到纳秒(LocalDateTime)
* 10.相同月日比较判断方法,isSameMonthDay*,betweenNextSameMonthDay*,nextSameMonthDay*, 比如用于生日,节日等周期性的日期比较判断
* 11.星座计算方法,getConstellation*,比如getConstellationNameCn(String monthDayStr),根据日期计算星座
* 12.计算指定年月或起始时间区间的时间列表,get*List, 比如getDateList(int year, int month),计算指定年月的时间列表
* 13.减少时间精度方法,reduceAccuracyTo*, 比如reduceAccuracyToDay(Date date),减少时间精度到天,其他补0,返回如,2020-04-23 00:00:00
* 14.获取时间戳方法,getEpoch*, 比如getEpochMilli()获取时间戳,getEpochMilliFormat()获取时间戳格式化字符串(yyyy-MM-dd HH:mm:ss)
* 15.计算年龄方法,getAge*, 比如getAge(Date birthDay),通过生日计算年龄
* 16.判断是否到生日方法,isBirthDay*, 比如isBirthDay(Date birthDay),根据生日判断当前日期是否到生日
* 17.周数计算方法,weekof*, 比如weekOfMonth(Date date),日期所在月中第几周
* 18.判断星期一,星期五方法,isMonday*,isZhouYi*, 比如isZhouYi(Date date),是否为周一
* 19.十二时辰计算方法,getTwelveTwo*, 比如getTwelveTwo(Date date),获取指定时间对应的十二时辰
* 20.季度计算方法,getQuarter*, 比如getQuarter(Date date),获取指定时间对应的季度
* 21.获取季度准确的起始时间方法(四个季度),startTimeOf*Quarter, 比如startTimeOfFirstQuarter(int year),获取指定年的第一季度开始时间
* 22.获取年准确的起始时间方法,startTimeOfYear, 比如startTimeOfYear(int year),获取指定年的开始时间
* 23.常用时间(明天,下周,下月,明年等)计算方法,比如tomorrow(),计算明天,返回Date
* 24.修改星期值方法 withDayOfWeek*,比如withDayOfWeek(Date date, long newValue),修改星期为指定值newValue,返回Date
* 25.中国工作日计算(将放假信息包含在内),包括判断当前日期是否为工作日和下一个工作日等方法, isChineseWorkDay*,nextChineseWorkDay*,比如isChineseWorkDay(Date, String holidayData),nextChineseWorkDay(Date date, String holidayData)
* 节假日数据holidayData,如果节假日数据不支持年份,将使用周一到周五为工作日来判断
* * * @author xkzhangsan * */ public class DateTimeCalculatorUtil { private DateTimeCalculatorUtil(){ } // get base time property /** * 获取年,比如2020 * @param date Date * @return int */ public static int getYear(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getYear(); } /** * 获取年,比如2020 * @param instant Instant * @return int */ public static int getYear(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getYear(); } /** * 获取年,比如2020 * LocalDateTime LocalDate ZonedDateTime 可以直接getYear() * @param localDateTime LocalDateTime * @return int */ public static int getYear(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getYear(); } /** * 获取年,比如2020 * LocalDateTime LocalDate ZonedDateTime 可以直接getYear() * @param localDate localDate * @return int */ public static int getYear(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.getYear(); } /** * 获取月, 比如 1 * @param date Date * @return int */ public static int getMonth(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getMonthValue(); } /** * 获取月, 比如 1 * @param instant Instant * @return int */ public static int getMonth(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getMonthValue(); } /** * 获取月, 比如 1 * LocalDateTime LocalDate ZonedDateTime 可以直接getMonthValue() * @param localDateTime LocalDateTime * @return int */ public static int getMonth(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getMonthValue(); } /** * 获取月, 比如 1 * LocalDateTime LocalDate ZonedDateTime 可以直接getMonthValue() * @param localDate LocalDate * @return int */ public static int getMonth(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.getMonthValue(); } /** * 获取月英文全称, 比如 January * @param date Date * @return String */ public static String getMonthEnLong(Date date){ return MonthNameEnum.getFullNameEnByCode(getMonth(date)); } /** * 获取月英文全称, 比如 January * @param instant Instant * @return String */ public static String getMonthEnLong(Instant instant){ return MonthNameEnum.getFullNameEnByCode(getMonth(instant)); } /** * 获取月英文全称, 比如 January * @param localDateTime LocalDateTime * @return String */ public static String getMonthEnLong(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return MonthNameEnum.getFullNameEnByCode(getMonth(localDateTime)); } /** * 获取月英文全称, 比如 January * @param localDate LocalDate * @return String */ public static String getMonthEnLong(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return MonthNameEnum.getFullNameEnByCode(getMonth(localDate)); } /** * 获取月英文简称, 比如 Jan * @param date Date * @return String */ public static String getMonthEnShort(Date date){ return MonthNameEnum.getShortNameEnByCode(getMonth(date)); } /** * 获取月英文简称, 比如 Jan * @param instant Instant * @return String */ public static String getMonthEnShort(Instant instant){ return MonthNameEnum.getShortNameEnByCode(getMonth(instant)); } /** * 获取月英文简称, 比如 Jan * @param localDateTime LocalDateTime * @return String */ public static String getMonthEnShort(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return MonthNameEnum.getShortNameEnByCode(getMonth(localDateTime)); } /** * 获取月英文简称, 比如 Jan * @param localDate LocalDate * @return String */ public static String getMonthEnShort(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return MonthNameEnum.getShortNameEnByCode(localDate.getMonthValue()); } /** * 获取月英文简称大写, 比如 JAN * @param date Date * @return String */ public static String getMonthEnShortUpper(Date date){ return MonthNameEnum.getShortNameEnByCode(getMonth(date)).toUpperCase(); } /** * 获取月英文简称大写, 比如 JAN * @param instant Instant * @return String */ public static String getMonthEnShortUpper(Instant instant){ return MonthNameEnum.getShortNameEnByCode(getMonth(instant)).toUpperCase(); } /** * 获取月英文简称大写, 比如 JAN * @param localDateTime LocalDateTime * @return String */ public static String getMonthEnShortUpper(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return MonthNameEnum.getShortNameEnByCode(getMonth(localDateTime)).toUpperCase(); } /** * 获取月英文简称大写, 比如 JAN * @param localDate LocalDate * @return String */ public static String getMonthEnShortUpper(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return MonthNameEnum.getShortNameEnByCode(localDate.getMonthValue()).toUpperCase(); } /** * 获取月份中文全称, 比如一月 * @param date Date * @return String */ public static String getMonthCnLong(Date date){ return MonthNameEnum.getFullNameCnByCode(getMonth(date)); } /** * 获取月份中文全称, 比如一月 * @param instant Instant * @return String */ public static String getMonthCnLong(Instant instant){ return MonthNameEnum.getFullNameCnByCode(getMonth(instant)); } /** * 获取月份中文全称, 比如一月 * @param localDateTime LocalDateTime * @return String */ public static String getMonthCnLong(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return MonthNameEnum.getFullNameCnByCode(getMonth(localDateTime)); } /** * 获取月份中文全称, 比如一月 * @param localDate LocalDate * @return String */ public static String getMonthCnLong(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return MonthNameEnum.getFullNameCnByCode(localDate.getMonthValue()); } /** * 获取月份中文简称, 比如一 * @param date Date * @return String */ public static String getMonthCnShort(Date date){ return MonthNameEnum.getShortNameCnByCode(getMonth(date)); } /** * 获取月份中文简称, 比如一 * @param instant Instant * @return String */ public static String getMonthCnShort(Instant instant){ return MonthNameEnum.getShortNameCnByCode(getMonth(instant)); } /** * 获取月份中文简称, 比如一 * @param localDateTime LocalDateTime * @return String */ public static String getMonthCnShort(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return MonthNameEnum.getShortNameCnByCode(getMonth(localDateTime)); } /** * 获取月份中文简称, 比如一 * @param localDate LocalDate * @return String */ public static String getMonthCnShort(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return MonthNameEnum.getShortNameCnByCode(localDate.getMonthValue()); } /** * 获取天 * @param date Date * @return int */ public static int getDayOfMonth(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getDayOfMonth(); } /** * 获取天 * @param instant Instant * @return int */ public static int getDayOfMonth(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getDayOfMonth(); } /** * 获取天 * LocalDateTime LocalDate ZonedDateTime 可以直接.getDayOfMonth() * @param localDateTime LocalDateTime * @return int */ public static int getDayOfMonth(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getDayOfMonth(); } /** * 获取天 * LocalDateTime LocalDate ZonedDateTime 可以直接.getDayOfMonth() * @param localDate localDate * @return int */ public static int getDayOfMonth(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.getDayOfMonth(); } /** * 获取天(一年中) * @param date Date * @return int */ public static int getDayOfYear(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getDayOfYear(); } /** * 获取天(一年中) * @param instant Instant * @return int */ public static int getDayOfYear(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getDayOfYear(); } /** * 获取天(一年中) * LocalDateTime LocalDate ZonedDateTime 可以直接.getDayOfYear()获取 * @param localDateTime LocalDateTime * @return int */ public static int getDayOfYear(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getDayOfYear(); } /** * 获取天(一年中) * LocalDateTime LocalDate ZonedDateTime 可以直接.getDayOfYear()获取 * @param localDate localDate * @return int */ public static int getDayOfYear(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.getDayOfYear(); } /** * 获取某年的总天数 * @param year 年 * @return int */ public static int getLengthOfYear(int year){ return Year.of(year).length(); } /** * 获取当前时间在一年中的第几天 * @return int */ public static int getDayOfYear(){ return getDayOfYear(new Date()); } /** * 获取小时 * @param date Date * @return int */ public static int getHour(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getHour(); } /** * 获取小时 * @param instant Instant * @return int */ public static int getHour(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getHour(); } /** * 获取小时 * LocalDateTime LocalTime ZonedDateTime 可以直接.getHour()获取 * @param localDateTime LocalDateTime * @return int */ public static int getHour(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getHour(); } /** * 获取小时 * LocalDateTime LocalTime ZonedDateTime 可以直接.getHour()获取 * @param localTime localTime * @return int */ public static int getHour(LocalTime localTime){ Objects.requireNonNull(localTime, "localTime"); return localTime.getHour(); } /** * 获取分钟 * @param date Date * @return int */ public static int getMinute(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getMinute(); } /** * 获取分钟 * @param instant Instant * @return int */ public static int getMinute(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getMinute(); } /** * 获取分钟 * LocalDateTime LocalTime ZonedDateTime 可以直接.getMinute()获取 * @param localDateTime LocalDateTime * @return int */ public static int getMinute(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getMinute(); } /** * 获取分钟 * LocalDateTime LocalTime ZonedDateTime 可以直接.getMinute()获取 * @param localTime localTime * @return int */ public static int getMinute(LocalTime localTime){ Objects.requireNonNull(localTime, "localTime"); return localTime.getMinute(); } /** * 获取秒 * @param date Date * @return int */ public static int getSecond(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getSecond(); } /** * 获取秒 * @param instant Instant * @return int */ public static int getSecond(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getSecond(); } /** * 获取秒 * LocalDateTime LocalTime ZonedDateTime 可以直接.getSecond()获取 * @param localDateTime LocalDateTime * @return int */ public static int getSecond(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getSecond(); } /** * 获取秒 * LocalDateTime LocalTime ZonedDateTime 可以直接.getSecond()获取 * @param localTime localTime * @return int */ public static int getSecond(LocalTime localTime){ Objects.requireNonNull(localTime, "localTime"); return localTime.getSecond(); } /** * 获取毫秒 * @param date Date * @return int */ public static int getMillisecond(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getNano()/1_000_000; } /** * 获取毫秒 * @param instant Instant * @return int */ public static int getMillisecond(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getNano()/1_000_000; } /** * 获取毫秒 * @param localDateTime LocalDateTime * @return int */ public static int getMillisecond(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getNano()/1_000_000; } /** * 获取毫秒 * @param localTime localTime * @return int */ public static int getMillisecond(LocalTime localTime){ Objects.requireNonNull(localTime, "localTime"); return localTime.getNano()/1_000_000; } /** * 获取毫秒 * @param zonedDateTime zonedDateTime * @return int */ public static int getMillisecond(ZonedDateTime zonedDateTime){ Objects.requireNonNull(zonedDateTime, "zonedDateTime"); return zonedDateTime.getNano()/1_000_000; } /** * 获取时间戳 * @return long */ public static long getEpochMilli(){ return System.currentTimeMillis(); } /** * 获取时间戳(到秒) * @return long */ public static long getEpochSecond(){ return System.currentTimeMillis()/1000; } /** * 获取格式化时间戳字符串 * @return String 格式: yyyy-MM-dd HH:mm:ss */ public static String getEpochMilliFormat(){ return DateTimeFormatterUtil.formatToDateTimeStr(new Date()); } /** * 获取格式化时间戳字符串,带毫秒 * @return String 格式: yyyy-MM-dd HH:mm:ss.SSS */ public static String getEpochMilliFormatFull(){ return DateTimeFormatterUtil.format(new Date(), DateTimeFormatterUtil.YYYY_MM_DD_HH_MM_SS_SSS_FMT); } /** * 获取格式化时间戳字符串 iso格式 带: 2020-02-18T22:37:55+08:00 * @return String 格式: yyyy-MM-ddTHH:mm:ssxxx */ public static String getEpochMilliIsoFormat(){ return DateTimeFormatterUtil.format(new Date(), DateTimeFormatterUtil.YYYY_MM_DD_T_HH_MM_SS_XXX_FMT); } /** * 获取格式化时间戳字符串 iso格式 带毫秒 带: 2020-02-18T22:37:55.991+08:00 * @return String 格式: yyyy-MM-dd'T'HH:mm:ss.SSSxxx */ public static String getEpochMilliIsoFormatFull(){ return DateTimeFormatterUtil.format(new Date(), DateTimeFormatterUtil.YYYY_MM_DD_T_HH_MM_SS_SSS_XXX_FMT); } /** * 获取格式化时间戳字符串 iso格式 2020-02-18T22:37:55+0800 * @return String 格式: yyyy-MM-ddTHH:mm:ssZ */ public static String getEpochMilliIsoNotFormatNoColon(){ return DateTimeFormatterUtil.format(new Date(), DateTimeFormatterUtil.YYYY_MM_DD_T_HH_MM_SS_Z_FMT); } /** * 获取格式化时间戳字符串 iso格式 带毫秒 2020-02-18T22:37:55.991+0800 * @return String 格式: yyyy-MM-dd'T'HH:mm:ss.SSSZ */ public static String getEpochMilliIsoFormatFullNoColon(){ return DateTimeFormatterUtil.format(new Date(), DateTimeFormatterUtil.YYYY_MM_DD_T_HH_MM_SS_SSS_Z_FMT); } /** * 根据年月日创建Date,时间部分为:00:00:00 * @param year 年 * @param month 月 * @param dayOfMonth 日 * @return Date */ public static Date getDate(int year, int month, int dayOfMonth){ return DateTimeConverterUtil.toDate(LocalDate.of(year, month, dayOfMonth)); } /** * 根据年月日时分秒创建Date * @param year 年 * @param month 月 * @param dayOfMonth 日 * @param hour 时 * @param minute 分 * @param second 秒 * @return Date */ public static Date getDate(int year, int month, int dayOfMonth, int hour, int minute, int second){ return DateTimeConverterUtil.toDate(LocalDateTime.of(year, month, dayOfMonth, hour, minute, second)); } /** * 根据年月日时分秒毫秒创建Date * @param year 年 * @param month 月 * @param dayOfMonth 日 * @param hour 时 * @param minute 分 * @param second 秒 * @param milliOfSecond 毫秒 * @return Date */ public static Date getDate(int year, int month, int dayOfMonth, int hour, int minute, int second, int milliOfSecond){ return DateTimeConverterUtil.toDate(LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, milliOfSecond*1000_000)); } /** * 获取指定月第一天 * @param year 年 * @param month 月 * @return Date */ public static Date getDateStartOfMonth(int year, int month){ return DateTimeConverterUtil.toDateStartOfMonth(YearMonth.of(year, month)); } /** * 获取指定月最后一天 * @param year 年 * @param month 月 * @return Date */ public static Date getDateEndOfMonth(int year, int month){ return DateTimeConverterUtil.toDateEndOfMonth(YearMonth.of(year, month)); } /** * 计算年龄 * @param birthDay 生日 * @return int 年龄 */ public static int getAge(LocalDate birthDay){ Objects.requireNonNull(birthDay, "birthDay"); Period period = periodBetween(birthDay, LocalDate.now()); if (period.getYears() < 0) { throw new DateTimeException("birthDay is after now!"); } else { return period.getYears(); } } /** * 计算年龄 * @param birthDay 生日 * @return int 年龄 */ public static int getAge(Date birthDay){ return getAge(DateTimeConverterUtil.toLocalDate(birthDay)); } /** * 计算年龄 * @param birthDay 生日 * @return int 年龄 */ public static int getAge(LocalDateTime birthDay){ return getAge(DateTimeConverterUtil.toLocalDate(birthDay)); } /** * 获得季度值 * @param localDateTime LocalDateTime * @return int 季度 1,2,3,4 */ public static int getQuarter(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return (localDateTime.getMonthValue()+2)/3; } /** * 获得季度值 * @param localDate LocalDate * @return int 季度 1,2,3,4 */ public static int getQuarter(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return (localDate.getMonthValue()+2)/3; } /** * 获得季度值 * @param date Date * @return int 季度 1,2,3,4 */ public static int getQuarter(Date date){ Objects.requireNonNull(date, "date"); return (getMonth(date)+2)/3; } /** * 获得当前季度值 * @return int 季度 1,2,3,4 */ public static int getQuarterOfNow(){ return (LocalDate.now().getMonthValue()+2)/3; } // plus two times /** * 加年 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusYears(Date date, long amountToAdd){ return plus(date, ChronoUnit.YEARS, amountToAdd); } /** * 加年 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusYears(LocalDateTime localDateTime, long amountToAdd){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.plusYears(amountToAdd); } /** * 加年 * @param localDate LocalDate * @param amountToAdd 增加的值 * @return LocalDate */ public static LocalDate plusYears(LocalDate localDate, long amountToAdd){ Objects.requireNonNull(localDate, "localDate"); return localDate.plusYears(amountToAdd); } /** * 加月 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusMonths(Date date, long amountToAdd){ return plus(date, ChronoUnit.MONTHS, amountToAdd); } /** * 加月 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusMonths(LocalDateTime localDateTime, long amountToAdd){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.plusMonths(amountToAdd); } /** * 加月 * @param localDate LocalDate * @param amountToAdd 增加的值 * @return LocalDate */ public static LocalDate plusMonths(LocalDate localDate, long amountToAdd){ Objects.requireNonNull(localDate, "localDate"); return localDate.plusMonths(amountToAdd); } /** * 加星期 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusWeeks(Date date, long amountToAdd){ return plus(date, ChronoUnit.WEEKS, amountToAdd); } /** * 加星期 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusWeeks(LocalDateTime localDateTime, long amountToAdd){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.plusWeeks(amountToAdd); } /** * 加星期 * @param localDate LocalDate * @param amountToAdd 增加的值 * @return LocalDate */ public static LocalDate plusWeeks(LocalDate localDate, long amountToAdd){ Objects.requireNonNull(localDate, "localDate"); return localDate.plusWeeks(amountToAdd); } /** * 加天 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusDays(Date date, long amountToAdd){ return plus(date, ChronoUnit.DAYS, amountToAdd); } /** * 加天 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusDays(LocalDateTime localDateTime, long amountToAdd){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.plusDays(amountToAdd); } /** * 加天 * @param localDate LocalDate * @param amountToAdd 增加的值 * @return LocalDate */ public static LocalDate plusDays(LocalDate localDate, long amountToAdd){ Objects.requireNonNull(localDate, "localDate"); return localDate.plusDays(amountToAdd); } /** * 加小时 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusHours(Date date, long amountToAdd){ return plus(date, ChronoUnit.HOURS, amountToAdd); } /** * 加小时 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusHours(LocalDateTime localDateTime, long amountToAdd){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.plusHours(amountToAdd); } /** * 加小时 * @param localTime LocalTime * @param amountToAdd 增加的值 * @return LocalTime */ public static LocalTime plusHours(LocalTime localTime, long amountToAdd){ Objects.requireNonNull(localTime, "localTime"); return localTime.plusHours(amountToAdd); } /** * 加分钟 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusMinutes(Date date, long amountToAdd){ return plus(date, ChronoUnit.MINUTES, amountToAdd); } /** * 加分钟 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusMinutes(LocalDateTime localDateTime, long amountToAdd){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.plusMinutes(amountToAdd); } /** * 加分钟 * @param localTime LocalTime * @param amountToAdd 增加的值 * @return LocalTime */ public static LocalTime plusMinutes(LocalTime localTime, long amountToAdd){ Objects.requireNonNull(localTime, "localTime"); return localTime.plusMinutes(amountToAdd); } /** * 加秒 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusSeconds(Date date, long amountToAdd){ return plus(date, ChronoUnit.SECONDS, amountToAdd); } /** * 加秒 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusSeconds(LocalDateTime localDateTime, long amountToAdd){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.plusSeconds(amountToAdd); } /** * 加秒 * @param localTime LocalTime * @param amountToAdd 增加的值 * @return LocalTime */ public static LocalTime plusSeconds(LocalTime localTime, long amountToAdd){ Objects.requireNonNull(localTime, "localTime"); return localTime.plusSeconds(amountToAdd); } /** * 增加毫秒 * @param date Date * @param amountToAdd 增加的值 * @return Date */ public static Date plusMillis(Date date, long amountToAdd){ return plus(date, ChronoUnit.MILLIS, amountToAdd); } /** * 增加毫秒 * @param localDateTime LocalDateTime * @param amountToAdd 增加的值 * @return LocalDateTime */ public static LocalDateTime plusMillis(LocalDateTime localDateTime, long amountToAdd){ return (LocalDateTime) plus(localDateTime, ChronoUnit.MILLIS, amountToAdd); } /** * 增加毫秒 * @param localTime LocalTime * @param amountToAdd 增加的值 * @return LocalTime */ public static LocalTime plusMillis(LocalTime localTime, long amountToAdd){ return (LocalTime) plus(localTime, ChronoUnit.MILLIS, amountToAdd); } // minus two times /** * 减年 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusYears(Date date, long amountToSubtract){ return minus(date, ChronoUnit.YEARS, amountToSubtract); } /** * 减年 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusYears(LocalDateTime localDateTime, long amountToSubtract){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.minusYears(amountToSubtract); } /** * 减年 * @param localDate LocalDate * @param amountToSubtract 减少的值 * @return LocalDate */ public static LocalDate minusYears(LocalDate localDate, long amountToSubtract){ Objects.requireNonNull(localDate, "localDate"); return localDate.minusYears(amountToSubtract); } /** * 减月 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusMonths(Date date, long amountToSubtract){ return minus(date, ChronoUnit.MONTHS, amountToSubtract); } /** * 减月 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusMonths(LocalDateTime localDateTime, long amountToSubtract){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.minusMonths(amountToSubtract); } /** * 减月 * @param localDate LocalDate * @param amountToSubtract 减少的值 * @return LocalDate */ public static LocalDate minusMonths(LocalDate localDate, long amountToSubtract){ Objects.requireNonNull(localDate, "localDate"); return localDate.minusMonths(amountToSubtract); } /** * 减星期 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusWeeks(Date date, long amountToSubtract){ return minus(date, ChronoUnit.WEEKS, amountToSubtract); } /** * 减星期 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusWeeks(LocalDateTime localDateTime, long amountToSubtract){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.minusWeeks(amountToSubtract); } /** * 减星期 * @param localDate LocalDate * @param amountToSubtract 减少的值 * @return LocalDate */ public static LocalDate minusWeeks(LocalDate localDate, long amountToSubtract){ Objects.requireNonNull(localDate, "localDate"); return localDate.minusWeeks(amountToSubtract); } /** * 减天 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusDays(Date date, long amountToSubtract){ return minus(date, ChronoUnit.DAYS, amountToSubtract); } /** * 减天 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusDays(LocalDateTime localDateTime, long amountToSubtract){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.minusDays(amountToSubtract); } /** * 减天 * @param localDate LocalDate * @param amountToSubtract 减少的值 * @return LocalDate */ public static LocalDate minusDays(LocalDate localDate, long amountToSubtract){ Objects.requireNonNull(localDate, "localDate"); return localDate.minusDays(amountToSubtract); } /** * 减小时 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusHours(Date date, long amountToSubtract){ return minus(date, ChronoUnit.HOURS, amountToSubtract); } /** * 减小时 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusHours(LocalDateTime localDateTime, long amountToSubtract){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.minusHours(amountToSubtract); } /** * 减小时 * @param localTime LocalTime * @param amountToSubtract 减少的值 * @return LocalTime */ public static LocalTime minusHours(LocalTime localTime, long amountToSubtract){ Objects.requireNonNull(localTime, "localTime"); return localTime.minusHours(amountToSubtract); } /** * 减分钟 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusMinutes(Date date, long amountToSubtract){ return minus(date, ChronoUnit.MINUTES, amountToSubtract); } /** * 减分钟 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusMinutes(LocalDateTime localDateTime, long amountToSubtract){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.minusMinutes(amountToSubtract); } /** * 减分钟 * @param localTime LocalTime * @param amountToSubtract 减少的值 * @return LocalTime */ public static LocalTime minusMinutes(LocalTime localTime, long amountToSubtract){ Objects.requireNonNull(localTime, "localTime"); return localTime.minusMinutes(amountToSubtract); } /** * 减秒 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusSeconds(Date date, long amountToSubtract){ return minus(date, ChronoUnit.SECONDS, amountToSubtract); } /** * 减秒 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusSeconds(LocalDateTime localDateTime, long amountToSubtract){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.minusSeconds(amountToSubtract); } /** * 减秒 * @param localTime LocalTime * @param amountToSubtract 减少的值 * @return LocalTime */ public static LocalTime minusSeconds(LocalTime localTime, long amountToSubtract){ Objects.requireNonNull(localTime, "localTime"); return localTime.minusSeconds(amountToSubtract); } /** * 减毫秒 * @param date Date * @param amountToSubtract 减少的值 * @return Date */ public static Date minusMillis(Date date, long amountToSubtract){ return minus(date, ChronoUnit.MILLIS, amountToSubtract); } /** * 减毫秒 * @param localDateTime LocalDateTime * @param amountToSubtract 减少的值 * @return LocalDateTime */ public static LocalDateTime minusMillis(LocalDateTime localDateTime, long amountToSubtract){ return (LocalDateTime) minus(localDateTime, ChronoUnit.MILLIS, amountToSubtract); } /** * 减毫秒 * @param localTime LocalTime * @param amountToSubtract 减少的值 * @return LocalTime */ public static LocalTime minusMillis(LocalTime localTime, long amountToSubtract){ return (LocalTime) minus(localTime, ChronoUnit.MILLIS, amountToSubtract); } // modify property /** * 修改年 * @param date Date * @param newValue 新值 * @return Date */ public static Date withYear(Date date, long newValue){ return with(date, ChronoField.YEAR, newValue); } /** * 修改年 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withYear(LocalDateTime localDateTime, long newValue){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.withYear((int) newValue); } /** * 修改年 * @param localDate LocalDate * @param newValue 新值 * @return LocalDate */ public static LocalDate withYear(LocalDate localDate, long newValue){ Objects.requireNonNull(localDate, "localDate"); return localDate.withYear((int) newValue); } /** * 修改月 * @param date Date * @param newValue 新值 * @return Date */ public static Date withMonth(Date date, long newValue){ return with(date, ChronoField.MONTH_OF_YEAR, newValue); } /** * 修改月 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withMonth(LocalDateTime localDateTime, long newValue){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.withMonth((int) newValue); } /** * 修改月 * @param localDate LocalDate * @param newValue 新值 * @return LocalDate */ public static LocalDate withMonth(LocalDate localDate, long newValue){ Objects.requireNonNull(localDate, "localDate"); return localDate.withMonth((int) newValue); } /** * 修改天 * @param date Date * @param newValue 新值 * @return Date */ public static Date withDayOfMonth(Date date, long newValue){ return with(date, ChronoField.DAY_OF_MONTH, newValue); } /** * 修改天 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withDayOfMonth(LocalDateTime localDateTime, long newValue){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.withDayOfMonth((int) newValue); } /** * 修改天 * @param localDate LocalDate * @param newValue 新值 * @return LocalDate */ public static LocalDate withDayOfMonth(LocalDate localDate, long newValue){ Objects.requireNonNull(localDate, "localDate"); return localDate.withDayOfMonth((int) newValue); } /** * 修改一年中的天 * @param date Date * @param newValue 新值 * @return Date */ public static Date withDayOfYear(Date date, long newValue){ return with(date, ChronoField.DAY_OF_YEAR, newValue); } /** * 修改一年中的天 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withDayOfYear(LocalDateTime localDateTime, long newValue){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.withDayOfYear((int) newValue); } /** * 修改一年中的天 * @param localDate LocalDate * @param newValue 新值 * @return LocalDate */ public static LocalDate withDayOfYear(LocalDate localDate, long newValue){ Objects.requireNonNull(localDate, "localDate"); return localDate.withDayOfYear((int) newValue); } /** * 修改小时 * @param date Date * @param newValue 新值 * @return Date */ public static Date withHour(Date date, long newValue){ return with(date, ChronoField.HOUR_OF_DAY, newValue); } /** * 修改小时 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withHour(LocalDateTime localDateTime, long newValue){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.withHour((int) newValue); } /** * 修改小时 * @param localTime LocalTime * @param newValue 新值 * @return LocalTime */ public static LocalTime withHour(LocalTime localTime, long newValue){ Objects.requireNonNull(localTime, "localTime"); return localTime.withHour((int) newValue); } /** * 修改分钟 * @param date Date * @param newValue 新值 * @return Date */ public static Date withMinute(Date date, long newValue){ return with(date, ChronoField.MINUTE_OF_HOUR, newValue); } /** * 修改分钟 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withMinute(LocalDateTime localDateTime, long newValue){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.withMinute((int) newValue); } /** * 修改分钟 * @param localTime LocalTime * @param newValue 新值 * @return LocalTime */ public static LocalTime withMinute(LocalTime localTime, long newValue){ Objects.requireNonNull(localTime, "localTime"); return localTime.withMinute((int) newValue); } /** * 修改秒 * @param date Date * @param newValue 新值 * @return Date */ public static Date withSecond(Date date, long newValue){ return with(date, ChronoField.SECOND_OF_MINUTE, newValue); } /** * 修改秒 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withSecond(LocalDateTime localDateTime, long newValue){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.withSecond((int) newValue); } /** * 修改秒 * @param localTime LocalTime * @param newValue 新值 * @return LocalTime */ public static LocalTime withSecond(LocalTime localTime, long newValue){ Objects.requireNonNull(localTime, "localTime"); return localTime.withSecond((int) newValue); } /** * 修改毫秒 * @param date Date * @param newValue 新值 * @return Date */ public static Date withMilli(Date date, long newValue){ return with(date, ChronoField.MILLI_OF_SECOND, newValue); } /** * 修改毫秒 * @param localDateTime LocalDateTime * @param newValue 新值 * @return LocalDateTime */ public static LocalDateTime withMilli(LocalDateTime localDateTime, long newValue){ return (LocalDateTime) with(localDateTime, ChronoField.MILLI_OF_SECOND, newValue); } /** * 修改毫秒 * @param localTime LocalTime * @param newValue 新值 * @return LocalTime */ public static LocalTime withMilli(LocalTime localTime, long newValue){ return (LocalTime) with(localTime, ChronoField.MILLI_OF_SECOND, newValue); } /** * 修改星期 * @param date Date * @param newValue 新值 1-7 * @return Date */ public static Date withDayOfWeek(Date date, long newValue){ return with(date, ChronoField.DAY_OF_WEEK, newValue); } /** * 修改星期 * @param localDateTime LocalDateTime * @param newValue 新值 1-7 * @return LocalDateTime */ public static LocalDateTime withDayOfWeek(LocalDateTime localDateTime, long newValue){ return (LocalDateTime) with(localDateTime, ChronoField.DAY_OF_WEEK, newValue); } /** * 修改星期 * @param localDate LocalDate * @param newValue 新值 1-7 * @return LocalDateTime */ public static LocalDate withDayOfWeek(LocalDate localDate, long newValue){ return (LocalDate) with(localDate, ChronoField.DAY_OF_WEEK, newValue); } // get the difference between two times /** * 获取2个日期的相差年月天的年数部分,不是相差总年数, * 比如2020-02-29 2021-03-07,返回1 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenYears(LocalDateTime startInclusive, LocalDateTime endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return Period.between(DateTimeConverterUtil.toLocalDate(startInclusive), DateTimeConverterUtil.toLocalDate(endExclusive)).getYears(); } /** * 获取2个日期的相差年月天的年数部分,不是相差总年数, * 比如2020-02-29 2021-03-07,返回1 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenYears(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return Period.between(DateTimeConverterUtil.toLocalDate(startInclusive), DateTimeConverterUtil.toLocalDate(endExclusive)).getYears(); } /** * 获取2个日期的相差年月天的年数部分,不是相差总年数, * 比如2020-02-29 2021-03-07,返回1 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenYears(LocalDate startInclusive, LocalDate endExclusive){ return Period.between(startInclusive, endExclusive).getYears(); } /** * 获取2个日期的相差年月天的月数部分,不是相差总月数, * 比如2020-02-29 2021-03-07,返回0 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenMonths(LocalDateTime startInclusive, LocalDateTime endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return Period.between(DateTimeConverterUtil.toLocalDate(startInclusive), DateTimeConverterUtil.toLocalDate(endExclusive)).getMonths(); } /** * 获取2个日期的相差年月天的月数部分,不是相差总月数, * 比如2020-02-29 2021-03-07,返回0 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenMonths(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return Period.between(DateTimeConverterUtil.toLocalDate(startInclusive), DateTimeConverterUtil.toLocalDate(endExclusive)).getMonths(); } /** * 获取2个日期的相差年月天的月数部分,不是相差总月数, * 比如2020-02-29 2021-03-07,返回0 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenMonths(LocalDate startInclusive, LocalDate endExclusive){ return Period.between(startInclusive, endExclusive).getMonths(); } /** * 获取2个日期的相差年月天的天数部分,不是相差总天数, * 比如2020-02-29 2021-03-07,返回7 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenDays(LocalDateTime startInclusive, LocalDateTime endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return Period.between(DateTimeConverterUtil.toLocalDate(startInclusive), DateTimeConverterUtil.toLocalDate(endExclusive)).getDays(); } /** * 获取2个日期的相差年月天的天数部分,不是相差总天数, * 比如2020-02-29 2021-03-07,返回7 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenDays(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return Period.between(DateTimeConverterUtil.toLocalDate(startInclusive), DateTimeConverterUtil.toLocalDate(endExclusive)).getDays(); } /** * 获取2个日期的相差年月天的天数部分,不是相差总天数, * 比如2020-02-29 2021-03-07,返回7 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenDays(LocalDate startInclusive, LocalDate endExclusive){ return Period.between(startInclusive, endExclusive).getDays(); } /** * 获取2个日期的相差总天数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalDays(LocalDateTime startInclusive, LocalDateTime endExclusive){ return Duration.between(startInclusive, endExclusive).toDays(); } /** * 获取2个日期的相差总天数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalDays(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return durationBetween(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endExclusive)).toDays(); } /** * 获取2个日期的相差总小时数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalHours(LocalDateTime startInclusive, LocalDateTime endExclusive){ return Duration.between(startInclusive, endExclusive).toHours(); } /** * 获取2个日期的相差总小时数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalHours(LocalTime startInclusive, LocalTime endExclusive){ return Duration.between(startInclusive, endExclusive).toHours(); } /** * 获取2个日期的相差总小时数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalHours(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return durationBetween(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endExclusive)).toHours(); } /** * 获取2个日期的相差总分钟数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalMinutes(LocalDateTime startInclusive, LocalDateTime endExclusive){ return Duration.between(startInclusive, endExclusive).toMinutes(); } /** * 获取2个日期的相差总分钟数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalMinutes(LocalTime startInclusive, LocalTime endExclusive){ return Duration.between(startInclusive, endExclusive).toMinutes(); } /** * 获取2个日期的相差总分钟数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalMinutes(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return durationBetween(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endExclusive)).toMinutes(); } /** * 获取2个日期的相差总秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalSeconds(LocalDateTime startInclusive, LocalDateTime endExclusive){ return Duration.between(startInclusive, endExclusive).getSeconds(); } /** * 获取2个日期的相差总秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalSeconds(LocalTime startInclusive, LocalTime endExclusive){ return Duration.between(startInclusive, endExclusive).getSeconds(); } /** * 获取2个日期的相差总秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalSeconds(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return durationBetween(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endExclusive)).getSeconds(); } /** * 获取2个日期的相差总毫秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalMillis(LocalDateTime startInclusive, LocalDateTime endExclusive){ return Duration.between(startInclusive, endExclusive).toMillis(); } /** * 获取2个日期的相差总毫秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalMillis(LocalTime startInclusive, LocalTime endExclusive){ return Duration.between(startInclusive, endExclusive).toMillis(); } /** * 获取2个日期的相差总毫秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalMillis(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return durationBetween(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endExclusive)).toMillis(); } /** * 获取2个日期的相差总纳秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalNanos(LocalDateTime startInclusive, LocalDateTime endExclusive){ return Duration.between(startInclusive, endExclusive).toNanos(); } /** * 获取2个日期的相差总纳秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalNanos(LocalTime startInclusive, LocalTime endExclusive){ return Duration.between(startInclusive, endExclusive).toNanos(); } /** * 获取2个日期的相差总纳秒数 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return long */ public static long betweenTotalNanos(Date startInclusive, Date endExclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endExclusive, "endExclusive"); return durationBetween(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endExclusive)).toNanos(); } // get other properties /** * 获取星期值 1-7,星期一到星期日 * @param date Date * @return int */ public static int getDayOfWeek(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).getDayOfWeek().getValue(); } /** * 获取星期值 1-7,星期一到星期日 * @param localDateTime LocalDateTime * @return int */ public static int getDayOfWeek(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.getDayOfWeek().getValue(); } /** * 获取星期值 1-7,星期一到星期日 * @param localDate LocalDate * @return int */ public static int getDayOfWeek(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.getDayOfWeek().getValue(); } /** * 获取星期值 1-7,星期一到星期日 * @param instant Instant * @return int */ public static int getDayOfWeek(Instant instant){ return DateTimeConverterUtil.toLocalDateTime(instant).getDayOfWeek().getValue(); } /** * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday * @param date Date * @return String */ public static String getDayOfWeekEnLong(Date date){ return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(date)); } /** * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday * @param localDateTime LocalDateTime * @return String */ public static String getDayOfWeekEnLong(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(localDateTime)); } /** * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday * @param localDate LocalDate * @return String */ public static String getDayOfWeekEnLong(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(localDate)); } /** * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday * @param instant Instant * @return String */ public static String getDayOfWeekEnLong(Instant instant){ return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(instant)); } /** * 获取星期英文简称,比如Mon * @param date Date * @return String */ public static String getDayOfWeekEnShort(Date date){ return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(date)); } /** * 获取星期英文简称,比如Mon * @param localDateTime LocalDateTime * @return String */ public static String getDayOfWeekEnShort(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(localDateTime)); } /** * 获取星期英文简称,比如Mon * @param localDate LocalDate * @return String */ public static String getDayOfWeekEnShort(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(localDate)); } /** * 获取星期英文简称,比如Mon * @param instant Instant * @return String */ public static String getDayOfWeekEnShort(Instant instant){ return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(instant)); } /** * 获取星期英文简称大写,比如MON * @param date Date * @return String */ public static String getDayOfWeekEnShortUpper(Date date){ return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(date)).toUpperCase(); } /** * 获取星期英文简称大写,比如MON * @param localDateTime LocalDateTime * @return String */ public static String getDayOfWeekEnShortUpper(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(localDateTime)).toUpperCase(); } /** * 获取星期英文简称大写,比如MON * @param localDate LocalDate * @return String */ public static String getDayOfWeekEnShortUpper(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(localDate)).toUpperCase(); } /** * 获取星期英文简称大写,比如MON * @param instant Instant * @return String */ public static String getDayOfWeekEnShortUpper(Instant instant){ return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(instant)).toUpperCase(); } /** * 获取星期中文,比如星期一 * @param date Date * @return String */ public static String getDayOfWeekCn(Date date){ return WeekNameEnum.getNameCnByCode(getDayOfWeek(date)); } /** * 获取星期中文,比如星期一 * @param localDateTime LocalDateTime * @return String */ public static String getDayOfWeekCn(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return WeekNameEnum.getNameCnByCode(getDayOfWeek(localDateTime)); } /** * 获取星期中文,比如星期一 * @param localDate LocalDate * @return String */ public static String getDayOfWeekCn(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return WeekNameEnum.getNameCnByCode(getDayOfWeek(localDate)); } /** * 获取星期中文,比如星期一 * @param instant Instant * @return String */ public static String getDayOfWeekCn(Instant instant){ return WeekNameEnum.getNameCnByCode(getDayOfWeek(instant)); } /** * 获取星期中文简称,比如星期一为一 * @param date Date * @return String */ public static String getDayOfWeekCnShort(Date date){ return WeekNameEnum.getNameCnByCode(getDayOfWeek(date)).substring(2); } /** * 获取星期中文简称,比如星期一为一 * @param localDateTime LocalDateTime * @return String */ public static String getDayOfWeekCnShort(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return WeekNameEnum.getNameCnByCode(getDayOfWeek(localDateTime)).substring(2); } /** * 获取星期中文简称,比如星期一为一 * @param localDate LocalDate * @return String */ public static String getDayOfWeekCnShort(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return WeekNameEnum.getNameCnByCode(getDayOfWeek(localDate)).substring(2); } /** * 获取星期中文简称,比如星期一为一 * @param instant Instant * @return String */ public static String getDayOfWeekCnShort(Instant instant){ return WeekNameEnum.getNameCnByCode(getDayOfWeek(instant)).substring(2); } /** * 获取当前月的第一天 * @param localDate LocalDate * @return LocalDate */ public static LocalDate firstDayOfMonth(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.with(TemporalAdjusters.firstDayOfMonth()); } /** * 获取当前月的第一天 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime firstDayOfMonth(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.with(TemporalAdjusters.firstDayOfMonth()); } /** * 获取当前月的第一天 * @param date Date * @return Date */ public static Date firstDayOfMonth(Date date){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).with(TemporalAdjusters.firstDayOfMonth())); } /** * 获取当前月的最后一天 * @param localDate LocalDate * @return LocalDate */ public static LocalDate lastDayOfMonth(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.with(TemporalAdjusters.lastDayOfMonth()); } /** * 获取当前月的最后一天 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime lastDayOfMonth(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.with(TemporalAdjusters.lastDayOfMonth()); } /** * 获取当前月的最后一天 * @param date Date * @return Date */ public static Date lastDayOfMonth(Date date){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).with(TemporalAdjusters.lastDayOfMonth())); } /** * 判断是否闰年 * @param localDate LocalDate * @return boolean */ public static boolean isLeapYear(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.isLeapYear(); } /** * 判断是否闰年 * @param localDateTime LocalDateTime * @return boolean */ public static boolean isLeapYear(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.toLocalDate().isLeapYear(); } /** * 判断是否闰年 * @param date Date * @return boolean */ public static boolean isLeapYear(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).toLocalDate().isLeapYear(); } /** * 判断是否闰年 * @param year 年 * @return boolean */ public static boolean isLeapYear(int year){ return ((year % 4) == 0) && ((year % 100) != 0 || (year % 400) == 0); } /** * 下一个闰年 * @param year 年 * @return int */ public static int nextLeapYear(int year){ for (int i = 0; i < 8; i++) { year++; if(isLeapYear(year)){ return year; } } return -1; } /** * 下一个闰年 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime nextLeapYear(LocalDateTime localDateTime){ return localDateTime.withYear(nextLeapYear(localDateTime.getYear())); } /** * 下一个闰年 * @param localDate LocalDate * @return LocalDate */ public static LocalDate nextLeapYear(LocalDate localDate){ return localDate.withYear(nextLeapYear(localDate.getYear())); } /** * 下一个闰年 * @param date Date * @return Date */ public static Date nextLeapYear(Date date){ return DateTimeConverterUtil.toDate(nextLeapYear(DateTimeConverterUtil.toLocalDateTime(date))); } /** * 判断是否工作日 (周一到周五) * @param date Date * @return boolean */ public static boolean isWorkDay(Date date){ int dayOfWeek = getDayOfWeek(date); if(dayOfWeek == 6 || dayOfWeek == 7){ return false; }else{ return true; } } /** * 判断是否工作日 (周一到周五) * @param localDateTime LocalDateTime * @return boolean */ public static boolean isWorkDay(LocalDateTime localDateTime){ int dayOfWeek = getDayOfWeek(localDateTime); if(dayOfWeek == 6 || dayOfWeek == 7){ return false; }else{ return true; } } /** * 判断是否工作日 (周一到周五) * @param localDate LocalDate * @return boolean */ public static boolean isWorkDay(LocalDate localDate){ int dayOfWeek = getDayOfWeek(localDate); if(dayOfWeek == 6 || dayOfWeek == 7){ return false; }else{ return true; } } /** * 判断是否周末(周六周日) * @param date Date * @return boolean */ public static boolean isWeekend(Date date){ return ! isWorkDay(date); } /** * 判断是否周末(周六周日) * @param localDateTime LocalDateTime * @return boolean */ public static boolean isWeekend(LocalDateTime localDateTime){ return ! isWorkDay(localDateTime); } /** * 判断是否周末(周六周日) * @param localDate LocalDate * @return boolean */ public static boolean isWeekend(LocalDate localDate){ return ! isWorkDay(localDate); } /** * 判断是否中国工作日,包含法定节假日调整日期,节假日数据holidayData,如果节假日数据不支持年份,将使用周一到周五为工作日来判断。 * @param date Date * @param holidayData 放假信息0表示放假,1表示工作日,如:2021-01-01:0,2021-02-07:1 * @return boolean */ public static boolean isChineseWorkDay(Date date, String holidayData){ return isChineseWorkDay(DateTimeConverterUtil.toLocalDateTime(date), holidayData); } /** * 判断是否中国工作日,包含法定节假日调整日期,节假日数据holidayData,如果节假日数据不支持年份,将使用周一到周五为工作日来判断。 * @param localDateTime LocalDateTime * @param holidayData 放假信息0表示放假,1表示工作日,如:2021-01-01:0,2021-02-07:1 * @return boolean */ public static boolean isChineseWorkDay(LocalDateTime localDateTime, String holidayData){ Objects.requireNonNull(holidayData, "holidayData"); Map dateTypeMap = StringUtil.convertHolidayDataToMap(holidayData); Integer dateType = dateTypeMap.get(DateTimeFormatterUtil.formatToDateStr(localDateTime)); if(dateType != null){ return dateType == 1 ? true : false; } return isWorkDay(localDateTime); } /** * 判断是否中国工作日,包含法定节假日调整日期,节假日数据holidayData,如果节假日数据不支持年份,将使用周一到周五为工作日来判断。 * @param localDate LocalDate * @param holidayData 放假信息0表示放假,1表示工作日,如:2021-01-01:0,2021-02-07:1 * @return boolean */ public static boolean isChineseWorkDay(LocalDate localDate, String holidayData){ return isChineseWorkDay(DateTimeConverterUtil.toLocalDateTime(localDate), holidayData); } /** * 下一个中国工作日,包含法定节假日调整日期,节假日数据holidayData,如果节假日数据不支持年份,将使用周一到周五为工作日来判断。 * @param date Date * @param holidayData 放假信息0表示放假,1表示工作日,如:2021-01-01:0,2021-02-07:1 * @return Date */ public static Date nextChineseWorkDay(Date date, String holidayData){ while(date != null){ date = plusDays(date, 1); if(isChineseWorkDay(DateTimeConverterUtil.toLocalDate(date), holidayData)){ return date; } } return null; } /** * 下一个中国工作日,包含法定节假日调整日期,节假日数据holidayData,如果节假日数据不支持年份,将使用周一到周五为工作日来判断。 * @param localDateTime LocalDateTime * @param holidayData 放假信息0表示放假,1表示工作日,如:2021-01-01:0,2021-02-07:1 * @return LocalDateTime */ public static LocalDateTime nextChineseWorkDay(LocalDateTime localDateTime, String holidayData){ while(localDateTime != null){ localDateTime = plusDays(localDateTime, 1); if(isChineseWorkDay(localDateTime, holidayData)){ return localDateTime; } } return null; } /** * 下一个中国工作日,包含法定节假日调整日期,节假日数据holidayData,如果节假日数据不支持年份,将使用周一到周五为工作日来判断。 * @param localDate LocalDate * @param holidayData 放假信息0表示放假,1表示工作日,如:2021-01-01:0,2021-02-07:1 * @return LocalDate */ public static LocalDate nextChineseWorkDay(LocalDate localDate, String holidayData){ while(localDate != null){ localDate = plusDays(localDate, 1); if(isChineseWorkDay(localDate, holidayData)){ return localDate; } } return null; } /** * 获取月的天数 * @param localDate LocalDate * @return int */ public static int lengthOfMonth(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.lengthOfMonth(); } /** * 获取月的天数 * @param localDateTime LocalDateTime * @return int */ public static int lengthOfMonth(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.toLocalDate().lengthOfMonth(); } /** * 获取月的天数 * @param date Date * @return int */ public static int lengthOfMonth(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).toLocalDate().lengthOfMonth(); } /** * 获取年的天数 * @param localDate LocalDate * @return int */ public static int lengthOfYear(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.lengthOfYear(); } /** * 获取年的天数 * @param localDateTime LocalDateTime * @return int */ public static int lengthOfYear(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.toLocalDate().lengthOfYear(); } /** * 获取年的天数 * @param date Date * @return int */ public static int lengthOfYear(Date date){ return DateTimeConverterUtil.toLocalDateTime(date).toLocalDate().lengthOfYear(); } /** * 下一个星期几 * @param localDate 日期 * @param dayOfWeek 星期 * @return LocalDate */ public static LocalDate next(LocalDate localDate, DayOfWeek dayOfWeek){ Objects.requireNonNull(localDate, "localDate"); return localDate.with(TemporalAdjusters.next(dayOfWeek)); } /** * 下一个星期几 * @param localDateTime 日期 * @param dayOfWeek 星期 * @return LocalDateTime */ public static LocalDateTime next(LocalDateTime localDateTime, DayOfWeek dayOfWeek){ return localDateTime.with(TemporalAdjusters.next(dayOfWeek)); } /** * 下一个星期几 * @param date 日期 * @param dayOfWeek 星期 * @return Date */ public static Date next(Date date, DayOfWeek dayOfWeek){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).with(TemporalAdjusters.next(dayOfWeek))); } /** * 上一个星期几 * @param localDate 日期 * @param dayOfWeek 星期 * @return LocalDate */ public static LocalDate previous(LocalDate localDate, DayOfWeek dayOfWeek){ Objects.requireNonNull(localDate, "localDate"); return localDate.with(TemporalAdjusters.previous(dayOfWeek)); } /** * 上一个星期几 * @param localDateTime 日期 * @param dayOfWeek 星期 * @return LocalDateTime */ public static LocalDateTime previous(LocalDateTime localDateTime, DayOfWeek dayOfWeek){ return localDateTime.with(TemporalAdjusters.previous(dayOfWeek)); } /** * 上一个星期几 * @param date 日期 * @param dayOfWeek 星期 * @return Date */ public static Date previous(Date date, DayOfWeek dayOfWeek){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).with(TemporalAdjusters.previous(dayOfWeek))); } /** * 获下一个工作日 * @param localDate LocalDate * @return LocalDate */ public static LocalDate nextWorkDay(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return localDate.with(TemporalAdjusterExtension.nextWorkDay()); } /** * 获下一个工作日 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime nextWorkDay(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.with(TemporalAdjusterExtension.nextWorkDay()); } /** * 获下一个工作日 * @param date Date * @return Date */ public static Date nextWorkDay(Date date){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).with(TemporalAdjusterExtension.nextWorkDay())); } /** * 获取当前系统当前时区时间 * @return ZonedDateTime */ public static ZonedDateTime getZonedDateTimeNowOfDefault(){ return ZonedDateTime.now(ZoneId.systemDefault()); } /** * 获取当前上海时区时间(北京时间) * @return ZonedDateTime */ public static ZonedDateTime getZonedDateTimeNowOfShanghai(){ return ZonedDateTime.now(ZoneId.of(ZoneIdEnum.CTT.getZoneIdName())); } /** * 获取当前巴黎时区时间 * @return ZonedDateTime */ public static ZonedDateTime getZonedDateTimeNowOfParis(){ return ZonedDateTime.now(ZoneId.of(ZoneIdEnum.ECT.getZoneIdName())); } /** * 获取当前美国东部标准时区 * @return ZonedDateTime */ public static ZonedDateTime getZonedDateTimeNowOfEST(){ return ZonedDateTime.now(ZoneId.of(ZoneIdEnum.EST.getZoneIdName())); } /** * 获取当前东京时区时间 * @return ZonedDateTime */ public static ZonedDateTime getZonedDateTimeNowOfTokyo(){ return ZonedDateTime.now(ZoneId.of(ZoneIdEnum.JST.getZoneIdName())); } // base operation /** * 日期加操作 * @param temporal Temporal * @param unit 单位 * @param amountToAdd 增加的值 增加的值 * @return Temporal */ public static Temporal plus(Temporal temporal, TemporalUnit unit, long amountToAdd) { Objects.requireNonNull(temporal, "temporal"); return temporal.plus(amountToAdd, unit); } /** * date日期加操作 * @param date Date * @param unit 单位 * @param amountToAdd 增加的值 增加的值 * @return Date */ public static Date plus(Date date, TemporalUnit unit, long amountToAdd) { return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).plus(amountToAdd, unit)); } /** * 日期减操作 * @param temporal Temporal * @param unit 单位 * @param amountToSubtract 减少的值 * @return Temporal */ public static Temporal minus(Temporal temporal, TemporalUnit unit, long amountToSubtract) { Objects.requireNonNull(temporal, "temporal"); return temporal.minus(amountToSubtract, unit); } /** * date日期减操作 * @param date 日期 * @param unit 单位 * @param amountToSubtract 减少的值 * @return Date */ public static Date minus(Date date, TemporalUnit unit, long amountToSubtract) { return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).minus(amountToSubtract, unit)); } /** * 根据field修改属性 * @param temporal Temporal * @param field 属性 * @param newValue 新值 * @return Temporal */ public static Temporal with(Temporal temporal, TemporalField field, long newValue) { Objects.requireNonNull(temporal, "temporal"); return temporal.with(field, newValue); } /** * 根据field修改属性 * @param date 日期 * @param field 属性 * @param newValue 新值 * @return Date */ public static Date with(Date date, TemporalField field, long newValue) { return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDateTime(date).with(field, newValue)); } /** * 获取2个日期的总的天时分秒毫秒纳秒 * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return Duration */ public static Duration durationBetween(Temporal startInclusive, Temporal endExclusive){ return Duration.between(startInclusive, endExclusive); } /** * 获取2个日期的相差年月日部分属性 * @param startDateInclusive 开始时间 * @param endDateExclusive 结束时间 * @return Period */ public static Period periodBetween(LocalDate startDateInclusive, LocalDate endDateExclusive){ return Period.between(startDateInclusive, endDateExclusive); } /** * 获取时区当前时间 * @param zoneId 时区 * @return ZonedDateTime */ public static ZonedDateTime getZonedDateTimeNow(String zoneId){ Objects.requireNonNull(zoneId, "zoneId"); return ZonedDateTime.now(ZoneId.of(zoneId)); } /** * 时区转换计算 * @param zonedDateTime ZonedDateTime * @param zoneId 例如 Asia/Shanghai * @return ZonedDateTime */ public static ZonedDateTime transform(ZonedDateTime zonedDateTime, String zoneId){ Objects.requireNonNull(zoneId, "zoneId"); return transform(zonedDateTime, ZoneId.of(zoneId)); } /** * 时区转换计算 * @param zonedDateTime ZonedDateTime * @param zone 时区 * @return ZonedDateTime */ public static ZonedDateTime transform(ZonedDateTime zonedDateTime, ZoneId zone){ Objects.requireNonNull(zonedDateTime, "zonedDateTime"); Objects.requireNonNull(zone, "zone"); return zonedDateTime.withZoneSameInstant(zone); } /** * 时区转换计算 * @param date Date * @param zoneId 目标时区 * @return 日期 yyyy-MM-dd HH:mm:ss */ public static String transform(Date date, String zoneId){ Objects.requireNonNull(zoneId, "zoneId"); return transform(date, ZoneId.of(zoneId)); } /** * 时区转换计算 * @param date Date * @param zone 目标时区 * @return 日期 yyyy-MM-dd HH:mm:ss */ public static String transform(Date date, ZoneId zone){ Objects.requireNonNull(zone, "zone"); return DateTimeFormatterUtil.formatToDateTimeStr(date, zone.toString()); } /** * 比较2个时间Date * @param date1 时间1 * @param date2 时间2 * @return int date1 大于 date2 返回1, date1 小于 date2 返回-1,date1 等于date2 返回0 */ public static int compare(Date date1, Date date2){ return compare(DateTimeConverterUtil.toLocalDateTime(date1), DateTimeConverterUtil.toLocalDateTime(date2)); } /** * 比较2个时间,可用于LocalDateTime,LocalDate,LocalTime,Instant * @param temporal1 时间1 * @param temporal2 时间2 * @return int temporal1 大于 temporal2 返回1, temporal1 小于 temporal2 返回-1,temporal1 等于temporal2 返回0 */ public static int compare(Temporal temporal1, Temporal temporal2){ Objects.requireNonNull(temporal1, "temporal1"); Objects.requireNonNull(temporal2, "temporal2"); if(temporal1 instanceof LocalDateTime && temporal2 instanceof LocalDateTime){ LocalDateTime localDateTimeA = (LocalDateTime)temporal1; LocalDateTime localDateTimeB = (LocalDateTime)temporal2; return localDateTimeA.compareTo(localDateTimeB); }else if(temporal1 instanceof LocalDate && temporal2 instanceof LocalDate){ LocalDate localDateA = (LocalDate)temporal1; LocalDate localDateB = (LocalDate)temporal2; return localDateA.compareTo(localDateB); }else if(temporal1 instanceof LocalTime && temporal2 instanceof LocalTime){ LocalTime localTimeA = (LocalTime)temporal1; LocalTime localTimeB = (LocalTime)temporal2; return localTimeA.compareTo(localTimeB); }else if(temporal1 instanceof Instant && temporal2 instanceof Instant){ Instant instantA = (Instant)temporal1; Instant instantB = (Instant)temporal2; return instantA.compareTo(instantB); } throw new DateTimeException("Unsupported Temporal, must be LocalDateTime,LocalDate,LocalTime,Instant"); } //获取精确起始时间 00:00:00 - 23:59:59 /** * 一天开始时间 00:00:00 * @return LocalTime */ public static LocalTime startTimeOfDay(){ return LocalTime.MIN; } /** * 一天开始时间 23:59:59 * @return LocalTime */ public static LocalTime endTimeOfDay(){ return LocalTime.of(23, 59, 59); } /** * 一天结束时间 精确时间到纳秒 23:59:59.999999999 * @return LocalTime */ public static LocalTime endAccuracyTimeOfDay(){ return LocalTime.MAX; } /** * 昨天起始时间 即:昨天日期+00:00:00 * @return Date */ public static Date startTimeOfYesterday(){ return DateTimeConverterUtil.toDate(LocalDate.now().minusDays(1).atTime(startTimeOfDay())); } /** * 昨天结束时间即:昨天日期+23:59:59 * @return Date */ public static Date endTimeOfYesterday(){ return DateTimeConverterUtil.toDate(LocalDate.now().minusDays(1).atTime(endTimeOfDay())); } /** * 明天起始时间 即:明天日期+00:00:00 * @return Date */ public static Date startTimeOfTomorrow(){ return DateTimeConverterUtil.toDate(LocalDate.now().plusDays(1).atTime(startTimeOfDay())); } /** * 明天结束时间即:明天日期+23:59:59 * @return Date */ public static Date endTimeOfTomorrow(){ return DateTimeConverterUtil.toDate(LocalDate.now().plusDays(1).atTime(endTimeOfDay())); } /** * 今天起始时间 即:今天日期+00:00:00 * @return Date */ public static Date startTimeOfToday(){ return DateTimeConverterUtil.toDate(LocalDate.now().atTime(startTimeOfDay())); } /** * 今天结束时间即:今天日期+23:59:59 * @return Date */ public static Date endTimeOfToday(){ return DateTimeConverterUtil.toDate(LocalDate.now().atTime(endTimeOfDay())); } /** * 上个月第一天起始时间 即:上个月第一天日期+00:00:00 * @return Date */ public static Date startTimeOfLastMonth(){ return DateTimeConverterUtil.toDate(firstDayOfMonth(LocalDate.now().minusMonths(1)).atTime(startTimeOfDay())); } /** * 上个月最后一天结束时间 即:上个月最后一天日期+23:59:59 * @return Date */ public static Date endTimeOfLastMonth(){ return DateTimeConverterUtil.toDate(lastDayOfMonth(LocalDate.now().minusMonths(1)).atTime(endTimeOfDay())); } /** * 当月第一天起始时间 即:当月第一天日期+00:00:00 * @return Date */ public static Date startTimeOfMonth(){ return DateTimeConverterUtil.toDate(firstDayOfMonth(LocalDate.now()).atTime(startTimeOfDay())); } /** * 当月最后一天结束时间即:当月最后一天日期+23:59:59 * @return Date */ public static Date endTimeOfMonth(){ return DateTimeConverterUtil.toDate(lastDayOfMonth(LocalDate.now()).atTime(endTimeOfDay())); } /** * 获date起始时间 * @param date Date * @return Date */ public static Date startTimeOfDate(Date date){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).atTime(startTimeOfDay())); } /** * 获取date结束时间 精确到秒 23:59:59 * @param date Date * @return Date */ public static Date endTimeOfDate(Date date){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).atTime(endTimeOfDay())); } /** * 获localDateTime结束时间,精确时间到纳秒 23:59:59.999000000 (转换为Date会丢失毫秒以后数据) * @param date Date * @return Date */ public static Date endAccuracyTimeOfDate(Date date){ return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).atTime(endAccuracyTimeOfDay())); } /** * 获localDateTime起始时间 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime startTimeOfLocalDateTime(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.with(startTimeOfDay()); } /** * 获取localDateTime结束时间,精确时间到纳秒 23:59:59.999999999 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime endAccuracyTimeOfLocalDateTime(LocalDateTime localDateTime){ Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.with(endAccuracyTimeOfDay()); } /** * 获取指定年月的第一天起始时间 * @param year 年 * @param month 月 * @return Date */ public static Date startTimeOfSpecialMonth(int year, int month){ return DateTimeConverterUtil.toDate(LocalDate.of(year, month, 1).atTime(startTimeOfDay())); } /** * 获取指定年月的最后一天结束时间 * @param year 年 * @param month 月 * @return Date */ public static Date endTimeOfSpecialMonth(int year, int month){ return DateTimeConverterUtil.toDate(lastDayOfMonth(LocalDate.of(year, month, 1)).atTime(endTimeOfDay())); } /** * 获取指定日期的起始时间 * @param year 年 * @param month 月 * @param dayOfMonth 日 * @return Date */ public static Date startTimeOfDate(int year, int month, int dayOfMonth){ return DateTimeConverterUtil.toDate(LocalDate.of(year, month, dayOfMonth).atTime(startTimeOfDay())); } /** * 获取指定日期的结束时间 * @param year 年 * @param month 月 * @param dayOfMonth 日 * @return Date */ public static Date endTimeOfDate(int year, int month, int dayOfMonth){ return DateTimeConverterUtil.toDate(LocalDate.of(year, month, dayOfMonth).atTime(endTimeOfDay())); } /** * 获取第一季度起始日期的开始时间 * @param year 年 * @return Date */ public static Date startTimeOfFirstQuarter(int year){ return startTimeOfSpecialMonth(year, 1); } /** * 获取第二季度起始日期的开始时间 * @param year 年 * @return Date */ public static Date startTimeOfSecondQuarter(int year){ return startTimeOfSpecialMonth(year, 4); } /** * 获取第三季度起始日期的开始时间 * @param year 年 * @return Date */ public static Date startTimeOfThirdQuarter(int year){ return startTimeOfSpecialMonth(year, 7); } /** * 获取第四季度起始日期的开始时间 * @param year 年 * @return Date */ public static Date startTimeOfFourthQuarter(int year){ return startTimeOfSpecialMonth(year, 10); } /** * 获取第一季度结束日期的开始时间 * @param year 年 * @return Date */ public static Date endTimeOfFirstQuarter(int year){ return endTimeOfSpecialMonth(year, 3); } /** * 获取第二季度结束日期的开始时间 * @param year 年 * @return Date */ public static Date endTimeOfSecondQuarter(int year){ return endTimeOfSpecialMonth(year, 6); } /** * 获取第三季度结束日期的开始时间 * @param year 年 * @return Date */ public static Date endTimeOfThirdQuarter(int year){ return endTimeOfSpecialMonth(year, 9); } /** * 获取第四季度结束日期的开始时间 * @param year 年 * @return Date */ public static Date endTimeOfFourthQuarter(int year){ return endTimeOfSpecialMonth(year, 12); } /** * 获取当前季度起始日期的开始时间 * @return Date */ public static Date startTimeOfCurrentQuarter(){ LocalDate now = LocalDate.now(); int year = now.getYear(); int firstMonthOfQuarter = now.getMonth().firstMonthOfQuarter().getValue(); return startTimeOfSpecialMonth(year, firstMonthOfQuarter); } /** * 获取当前季度结束日期的时间 * @return Date */ public static Date endTimeOfCurrentQuarter(){ LocalDate now = LocalDate.now(); int year = now.getYear(); int endMonthOfQuarter = now.getMonth().firstMonthOfQuarter().getValue()+2; return endTimeOfSpecialMonth(year, endMonthOfQuarter); } /** * 获取指定年起始日期的开始时间 * @param year 年 * @return Date */ public static Date startTimeOfYear(int year){ return startTimeOfSpecialMonth(year, 1); } /** * 获取指定年结束日期的开始时间 * @param year 年 * @return Date */ public static Date endTimeOfYear(int year){ return endTimeOfSpecialMonth(year, 12); } /** * 获取当前年起始日期的开始时间 * @return Date */ public static Date startTimeOfCurrentYear(){ return startTimeOfYear(LocalDate.now().getYear()); } /** * 获取当前年结束日期的时间 * @return Date */ public static Date endTimeOfCurrentYear(){ return endTimeOfYear(LocalDate.now().getYear()); } // 使用MonthDay对比时间的月日,用于生日,节日等周期性的日期比较判断。 /** * 相同月日比较判断,用于生日,节日等周期性的日期比较判断。 * @param localDate1 日期1 * @param monthDay 月日 * @return boolean */ public static boolean isSameMonthDay(LocalDate localDate1, MonthDay monthDay){ Objects.requireNonNull(localDate1, "localDate1"); Objects.requireNonNull(monthDay, "monthDay"); return MonthDay.of(localDate1.getMonthValue(), localDate1.getDayOfMonth()).equals(monthDay); } /** * 相同月日比较判断,用于生日,节日等周期性的日期比较判断。 * @param localDate1 日期1 * @param monthDayStr 月日字符串 MM-dd格式 * @return boolean */ public static boolean isSameMonthDay(LocalDate localDate1, String monthDayStr){ Objects.requireNonNull(monthDayStr, "monthDayStr"); return isSameMonthDay(localDate1, MonthDay.parse(MONTHDAY_FORMAT_PRE + monthDayStr)); } /** * 相同月日比较判断,用于生日,节日等周期性的日期比较判断。 * @param localDate1 日期1 * @param localDate2 日期2 * @return boolean */ public static boolean isSameMonthDay(LocalDate localDate1, LocalDate localDate2){ Objects.requireNonNull(localDate2, "localDate2"); return isSameMonthDay(localDate1, MonthDay.of(localDate2.getMonthValue(), localDate2.getDayOfMonth())); } /** * 相同月日比较判断,用于生日,节日等周期性的日期比较判断。 * @param date 日期 * @param monthDayStr 月日字符串,MM-dd格式 * @return boolean */ public static boolean isSameMonthDay(Date date, String monthDayStr){ return isSameMonthDay(DateTimeConverterUtil.toLocalDate(date), monthDayStr); } /** * 相同月日比较判断,用于生日,节日等周期性的日期比较判断。 * @param date1 日期1 * @param date2 日期2 * @return boolean */ public static boolean isSameMonthDay(Date date1, Date date2){ Objects.requireNonNull(date1, "date1"); Objects.requireNonNull(date2, "date2"); return isSameMonthDay(DateTimeConverterUtil.toLocalDate(date1), DateTimeConverterUtil.toLocalDate(date2)); } /** * 相同月日比较判断,与当前日期对比,用于生日,节日等周期性的日期比较判断 * @param monthDayStr 月日字符串,MM-dd格式 * @return boolean */ public static boolean isSameMonthDayOfNow(String monthDayStr){ return isSameMonthDay(LocalDate.now(), monthDayStr); } /** * 下个固定月日相差天数,用于生日,节日等周期性的日期推算 * @param localDate1 日期1 * @param month 月 * @param dayOfMonth 日 * @return long */ public static long betweenNextSameMonthDay(LocalDate localDate1, int month, int dayOfMonth) { Objects.requireNonNull(localDate1, "localDate1"); MonthDay monthDay1 = MonthDay.of(localDate1.getMonthValue(), localDate1.getDayOfMonth()); MonthDay monthDay2 = MonthDay.of(month, dayOfMonth); // 闰年2月29 MonthDay leapMonthDay = MonthDay.of(2, 29); if (leapMonthDay.equals(monthDay2)) { LocalDate nextLeapYear = nextLeapYear(localDate1); return betweenTotalDays(localDate1.atStartOfDay(), nextLeapYear.withMonth(month).withDayOfMonth(dayOfMonth).atStartOfDay()); } // localDate1 月日 小于 month dayOfMonth if (monthDay1.compareTo(monthDay2) == -1) { return betweenTotalDays(localDate1.atStartOfDay(), localDate1.withMonth(month).withDayOfMonth(dayOfMonth).atStartOfDay()); } else { LocalDate next = localDate1.plusYears(1); return betweenTotalDays(localDate1.atStartOfDay(), next.withMonth(month).withDayOfMonth(dayOfMonth).atStartOfDay()); } } /** * 下个固定月日相差天数,用于生日,节日等周期性的日期推算 * @param localDate 日期 * @param monthDayStr 月日字符串,MM-dd格式 * @return long */ public static long betweenNextSameMonthDay(LocalDate localDate, String monthDayStr) { Objects.requireNonNull(monthDayStr, "monthDayStr"); MonthDay monthDay2 = MonthDay.parse(MONTHDAY_FORMAT_PRE + monthDayStr); return betweenNextSameMonthDay(localDate, monthDay2.getMonthValue(), monthDay2.getDayOfMonth()); } /** * 下个固定月日相差天数,用于生日,节日等周期性的日期推算 * @param date 日期 * @param monthDayStr 月日字符串,MM-dd格式 * @return long */ public static long betweenNextSameMonthDay(Date date, String monthDayStr) { Objects.requireNonNull(monthDayStr, "monthDayStr"); MonthDay monthDay2 = MonthDay.parse(MONTHDAY_FORMAT_PRE + monthDayStr); return betweenNextSameMonthDay(DateTimeConverterUtil.toLocalDate(date), monthDay2.getMonthValue(), monthDay2.getDayOfMonth()); } /** * 下个固定月日相差天数,与当前日期对比,用于生日,节日等周期性的日期推算 * @param monthDayStr 月日字符串,MM-dd格式 * @return long */ public static long betweenNextSameMonthDayOfNow(String monthDayStr) { Objects.requireNonNull(monthDayStr, "monthDayStr"); MonthDay monthDay2 = MonthDay.parse(MONTHDAY_FORMAT_PRE + monthDayStr); return betweenNextSameMonthDay(LocalDate.now(), monthDay2.getMonthValue(), monthDay2.getDayOfMonth()); } /** * 下个固定月日相差日期,用于生日,节日等周期性的日期推算 * @param localDate 日期 * @param monthDayStr 月日字符串,MM-dd格式 * @return LocalDate */ public static LocalDate nextSameMonthDay(LocalDate localDate, String monthDayStr){ return localDate.plusDays(betweenNextSameMonthDay(localDate, monthDayStr)); } /** * 下个固定月日相差日期,用于生日,节日等周期性的日期推算 * @param date 日期 * @param monthDayStr 月日字符串,MM-dd格式 * @return Date */ public static Date nextSameMonthDay(Date date, String monthDayStr){ return DateTimeConverterUtil.toDate(nextSameMonthDay(DateTimeConverterUtil.toLocalDate(date), monthDayStr)); } /** * 下个固定月日相差日期,与当前日期对比,用于生日,节日等周期性的日期推算 * @param monthDayStr 月日字符串,MM-dd格式 * @return Date */ public static Date nextSameMonthDayOfNow(String monthDayStr){ return nextSameMonthDay(new Date(), monthDayStr); } /** * 根据日期查询星座中文名称 * @param monthDayStr 月日字符串,MM-dd格式 * @return String */ public static String getConstellationNameCn(String monthDayStr){ return ConstellationNameEnum.getNameCnByMonthDay(monthDayStr); } /** * 根据日期查询星座中文名称 * @param date Date * @return String */ public static String getConstellationNameCn(Date date){ String monthDayStr = DateTimeFormatterUtil.format(date, DateTimeFormatterUtil.MM_DD_FMT); return ConstellationNameEnum.getNameCnByMonthDay(monthDayStr); } /** * 根据日期查询星座英文名称 * @param monthDayStr 月日字符串,MM-dd格式 * @return String */ public static String getConstellationNameEn(String monthDayStr){ return ConstellationNameEnum.getNameEnByMonthDay(monthDayStr); } /** * 获取指定区间的时间列表,包含起始 * @param startInclusive 开始时间 * @param endInclusive 结束时间 * @return 时间列表 */ public static List getLocalDateTimeList(LocalDateTime startInclusive, LocalDateTime endInclusive){ Objects.requireNonNull(startInclusive, "startInclusive"); Objects.requireNonNull(endInclusive, "endInclusive"); if(startInclusive.isAfter(endInclusive)){ throw new DateTimeException("startInclusive must before or equal endInclusive!"); } List localDateTimeList = new ArrayList(); long days = betweenTotalDays(startInclusive, endInclusive)+1; for(long i=0; i getLocalDateList(LocalDate startInclusive, LocalDate endInclusive){ return getLocalDateTimeList(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endInclusive)).stream() .map(localDateTime -> localDateTime.toLocalDate()).collect(Collectors.toList()); } /** * 获取指定区间的时间列表,包含起始 * @param startInclusive 开始时间 * @param endInclusive 结束时间 * @return 时间列表 */ public static List getDateList(Date startInclusive, Date endInclusive){ return getLocalDateTimeList(DateTimeConverterUtil.toLocalDateTime(startInclusive), DateTimeConverterUtil.toLocalDateTime(endInclusive)).stream() .map(localDateTime -> DateTimeConverterUtil.toDate(localDateTime)).collect(Collectors.toList()); } /** * 获取指定年月的所有日期列表 * @param yearMonth 年月 * @return 时间列表 */ public static List getLocalDateList(YearMonth yearMonth){ Objects.requireNonNull(yearMonth, "yearMonth"); List localDateList = new ArrayList(); long days = yearMonth.lengthOfMonth(); LocalDate localDate = DateTimeConverterUtil.toLocalDateStartOfMonth(yearMonth); for(long i=0; i getLocalDateList(String yearMonthStr){ Objects.requireNonNull(yearMonthStr, "yearMonthStr"); YearMonth yearMonth = YearMonth.parse(yearMonthStr); return getLocalDateList(yearMonth); } /** * 获取指定年月的所有日期列表 * @param year 年 * @param month 月 * @return 时间列表 */ public static List getLocalDateList(int year, int month){ YearMonth yearMonth = YearMonth.of(year, month); return getLocalDateList(yearMonth); } /** * 获取指定年月的所有日期列表 * @param yearMonth 年月 * @return 时间列表 */ public static List getLocalDateTimeList(YearMonth yearMonth){ return getLocalDateList(yearMonth).stream() .map(localDate -> DateTimeConverterUtil.toLocalDateTime(localDate)).collect(Collectors.toList()); } /** * 获取指定年月的所有日期列表 * @param yearMonthStr 年月字符串,格式: yyyy-MM * @return 时间列表 */ public static List getLocalDateTimeList(String yearMonthStr){ return getLocalDateList(yearMonthStr).stream() .map(localDate -> DateTimeConverterUtil.toLocalDateTime(localDate)).collect(Collectors.toList()); } /** * 获取指定年月的所有日期列表 * @param year 年 * @param month 月 * @return 时间列表 */ public static List getLocalDateTimeList(int year, int month){ return getLocalDateList(YearMonth.of(year, month)).stream() .map(localDate -> DateTimeConverterUtil.toLocalDateTime(localDate)).collect(Collectors.toList()); } /** * 获取指定年月的所有日期列表 * @param yearMonthStr 年月字符串,格式: yyyy-MM * @return 时间列表 */ public static List getDateList(String yearMonthStr){ return getLocalDateList(yearMonthStr).stream().map(localDate -> DateTimeConverterUtil.toDate(localDate)) .collect(Collectors.toList()); } /** * 获取指定年月的所有日期列表 * @param year 年 * @param month 月 * @return 时间列表 */ public static List getDateList(int year, int month){ return getLocalDateList(YearMonth.of(year, month)).stream().map(localDate -> DateTimeConverterUtil.toDate(localDate)) .collect(Collectors.toList()); } /** * 判断是否过期,(输入年月小于当前年月) * @param yearMonth 年月 * @return boolean */ public static boolean isExpiry(YearMonth yearMonth){ Objects.requireNonNull(yearMonth, "yearMonth"); if(yearMonth.isBefore(YearMonth.now())){ return true; } return false; } /** * 判断是否过期,(输入年月小于当前年月) * @param yearMonthStr 年月字符串,格式: yyyy-MM * @return boolean */ public static boolean isExpiry(String yearMonthStr){ Objects.requireNonNull(yearMonthStr, "yearMonthStr"); YearMonth yearMonth = YearMonth.parse(yearMonthStr); return isExpiry(yearMonth); } /** * 是否为生日 * @param birthDay 生日 * @return boolean */ public static boolean isBirthDay(LocalDate birthDay){ Objects.requireNonNull(birthDay, "birthDay"); return isSameMonthDay(birthDay, LocalDate.now()); } /** * 是否为生日 * @param birthDay 生日 * @return boolean */ public static boolean isBirthDay(Date birthDay){ Objects.requireNonNull(birthDay, "birthDay"); return isBirthDay(DateTimeConverterUtil.toLocalDate(birthDay)); } /** * 是否为生日 * @param birthDay 生日 * @return boolean */ public static boolean isBirthDay(LocalDateTime birthDay){ Objects.requireNonNull(birthDay, "birthDay"); return isBirthDay(DateTimeConverterUtil.toLocalDate(birthDay)); } /** * 减少时间精度到秒,其他补0,返回如,2020-04-23 15:18:13 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime reduceAccuracyToSecond(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonthValue(), localDateTime.getDayOfMonth(), localDateTime.getHour(), localDateTime.getMinute(), localDateTime.getSecond()); } /** * 减少时间精度到秒,其他补0,返回如,2020-04-23 15:18:13 * @param date Date * @return Date */ public static Date reduceAccuracyToSecond(Date date) { Objects.requireNonNull(date, "date"); return DateTimeConverterUtil.toDate(reduceAccuracyToSecond(DateTimeConverterUtil.toLocalDateTime(date))); } /** * 减少时间精度到分,其他补0,返回如,2020-04-23 15:18:00 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime reduceAccuracyToMinute(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonthValue(), localDateTime.getDayOfMonth(), localDateTime.getHour(), localDateTime.getMinute(), 0); } /** * 减少时间精度到分,其他补0,返回如,2020-04-23 15:18:00 * @param date Date * @return Date */ public static Date reduceAccuracyToMinute(Date date) { Objects.requireNonNull(date, "date"); return DateTimeConverterUtil.toDate(reduceAccuracyToMinute(DateTimeConverterUtil.toLocalDateTime(date))); } /** * 减少时间精度到小时,其他补0,返回如,2020-04-23 15:00:00 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime reduceAccuracyToHour(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonthValue(), localDateTime.getDayOfMonth(), localDateTime.getHour(), 0, 0); } /** * 减少时间精度到小时,其他补0,返回如,2020-04-23 15:00:00 * @param date Date * @return Date */ public static Date reduceAccuracyToHour(Date date) { Objects.requireNonNull(date, "date"); return DateTimeConverterUtil.toDate(reduceAccuracyToHour(DateTimeConverterUtil.toLocalDateTime(date))); } /** * 减少时间精度到天,其他补0,返回如,2020-04-23 00:00:00 * @param localDateTime LocalDateTime * @return LocalDateTime */ public static LocalDateTime reduceAccuracyToDay(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonthValue(), localDateTime.getDayOfMonth(), 0, 0, 0); } /** * 减少时间精度到天,其他补0,返回如,2020-04-23 00:00:00 * @param date Date * @return Date */ public static Date reduceAccuracyToDay(Date date) { Objects.requireNonNull(date, "date"); return DateTimeConverterUtil.toDate(reduceAccuracyToDay(DateTimeConverterUtil.toLocalDateTime(date))); } /** * 日期所在月中第几周 * @param localDate LocalDate * @param locale 地区 为null 是取系统默认地区 * @return 周数 */ public static int weekOfMonth(LocalDate localDate, Locale locale){ Objects.requireNonNull(localDate, "localDate"); WeekFields weekFields = locale == null ? WeekFields.of(Locale.getDefault()) : WeekFields.of(locale); return (int) weekFields.weekOfMonth().getFrom(localDate); } /** * 日期所在月中第几周 * @param localDate LocalDate * @return 周数 */ public static int weekOfMonth(LocalDate localDate){ return weekOfMonth(localDate, null); } /** * 日期所在月中第几周 * @param localDateTime LocalDateTime * @return 周数 */ public static int weekOfMonth(LocalDateTime localDateTime){ return weekOfMonth(DateTimeConverterUtil.toLocalDate(localDateTime), null); } /** * 日期所在月中第几周 * @param date Date * @return 周数 */ public static int weekOfMonth(Date date){ return weekOfMonth(DateTimeConverterUtil.toLocalDate(date), null); } /** * 当前日期所在月中第几周 * @return 周数 */ public static int weekOfMonth(){ return weekOfMonth(LocalDate.now()); } /** * 日期所在年中第几周 * @param localDate LocalDate * @param locale 地区 为null 是取系统默认地区 * @return 周数 */ public static int weekOfYear(LocalDate localDate, Locale locale){ Objects.requireNonNull(localDate, "localDate"); WeekFields weekFields = locale == null ? WeekFields.of(Locale.getDefault()) : WeekFields.of(locale); return (int) weekFields.weekOfYear().getFrom(localDate); } /** * 日期所在年中第几周 * @param localDate LocalDate * @return 周数 */ public static int weekOfYear(LocalDate localDate){ return weekOfYear(localDate, null); } /** * 日期所在年中第几周 * @param localDateTime LocalDateTime * @return 周数 */ public static int weekOfYear(LocalDateTime localDateTime){ return weekOfYear(DateTimeConverterUtil.toLocalDate(localDateTime), null); } /** * 日期所在年中第几周 * @param date Date * @return 周数 */ public static int weekOfYear(Date date){ return weekOfYear(DateTimeConverterUtil.toLocalDate(date), null); } /** * 当前日期所在年中第几周 * @return 周数 */ public static int weekOfYear(){ return weekOfYear(LocalDate.now()); } /** * 是否为周一 * @param localDate LocalDate * @return 是 true 否 false */ public static boolean isMonday(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return WeekNameEnum.Mon.getCode() == localDate.getDayOfWeek().getValue(); } /** * 是否为周一 * @param date Date * @return 是 true 否 false */ public static boolean isMonday(Date date){ return isMonday(DateTimeConverterUtil.toLocalDate(date)); } /** * 是否为周一 * @param localDate LocalDate * @return 是 true 否 false */ public static boolean isZhouYi(LocalDate localDate){ return isMonday(localDate); } /** * 是否为周一 * @param date Date * @return 是 true 否 false */ public static boolean isZhouYi(Date date){ return isMonday(DateTimeConverterUtil.toLocalDate(date)); } /** * 是否为周五 * @param localDate LocalDate * @return 是 true 否 false */ public static boolean isFriday(LocalDate localDate){ Objects.requireNonNull(localDate, "localDate"); return WeekNameEnum.Fri.getCode() == localDate.getDayOfWeek().getValue(); } /** * 是否为周五 * @param date Date * @return 是 true 否 false */ public static boolean isFriday(Date date){ return isFriday(DateTimeConverterUtil.toLocalDate(date)); } /** * 是否为周五 * @param localDate LocalDate * @return 是 true 否 false */ public static boolean isZhouWu(LocalDate localDate){ return isFriday(localDate); } /** * 是否为周五 * @param date Date * @return 是 true 否 false */ public static boolean isZhouWu(Date date){ return isFriday(DateTimeConverterUtil.toLocalDate(date)); } /** * 获取指定时间对应的十二时辰 * @param localTime LocalTime * @return 十二时辰名称 */ public static String getTwelveTwo(LocalTime localTime){ return TwelveTwoEnum.getNameCn(localTime); } /** * 获取指定时间对应的十二时辰 * @param localDateTime LocalDateTime * @return 十二时辰名称 */ public static String getTwelveTwo(LocalDateTime localDateTime){ return TwelveTwoEnum.getNameCn(DateTimeConverterUtil.toLocalTime(localDateTime)); } /** * 获取指定时间对应的十二时辰 * @param date Date * @return 十二时辰名称 */ public static String getTwelveTwo(Date date){ return TwelveTwoEnum.getNameCn(date); } /** * 获取当前时间对应的十二时辰 * @return 十二时辰名称 */ public static String getTwelveTwo(){ return TwelveTwoEnum.getNameCn(LocalTime.now()); } // 以当前时间为参考的,常用时间(明天,下周,下月,明年等)计算 /** * 今天 * @return Date */ public static Date today(){ return new Date(); } /** * 明天 * @return Date */ public static Date tomorrow(){ return plusDays(today(), 1); } /** * 下周 * @return Date */ public static Date nextWeek(){ return plusWeeks(today(), 1); } /** * 下月 * @return Date */ public static Date nextMonth(){ return plusMonths(today(), 1); } /** * 明年 * @return Date */ public static Date nextYear(){ return plusYears(today(), 1); } /** * 昨天 * @return Date */ public static Date yesterday(){ return minusDays(today(), 1); } /** * 上周 * @return Date */ public static Date lastWeek(){ return minusWeeks(today(), 1); } /** * 上月 * @return Date */ public static Date lastMonth(){ return minusMonths(today(), 1); } /** * 去年 * @return Date */ public static Date lastYear(){ return minusYears(today(), 1); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy