java8提供线程安全、功能强大的时间处理方法。写了一个工具类,方便理解和调用。
import java.time.*;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.DAY_OF_YEAR;
import static java.time.temporal.ChronoUnit.MONTHS;
import static java.time.temporal.ChronoUnit.YEARS;
/**
* @program: spring-boot04-web-restful
* @description:java8版本日期工具
* @create: 2020-10-28 10:38
**/
public class DateTemporal {
/**
*@Description Date转LocalDate
*@Date 2020/8/6
*/
public static LocalDate getLocalDate(Date startDate) {
Instant instant = startDate.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
return localDateTime.toLocalDate();
}
/**
*@Description LocalDate转Date
*@Date 2020/8/6
*/
public static Date getDate(LocalDate beginDate) {
ZoneId zoneId = ZoneId.systemDefault();
Instant instant = beginDate.atStartOfDay().atZone(zoneId).toInstant();
return Date.from(instant);
}
/**
* @Description: 获取本月第几天
* @Param: [startDate, N]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getNDateOfThisMonth(LocalDate startDate,int N){
return startDate.withDayOfMonth(N);
}
/**
* @Description: 获取指定日期在第几个月的日期
* @Param: [startDate, N]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getNMonthOfDate(LocalDate startDate,int N){
return startDate.withMonth(N);
}
/**
* @Description: 获取指定日期在哪一年的日期
* @Param: [startDate, N]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getNYearOfDate(LocalDate startDate,int N){
return startDate.withYear(N);
}
/**
* @Description: 获取本年第几天
* @Param: [startDate, N]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getNDateOfThisYear(LocalDate startDate,int N){
return startDate.withDayOfYear(N);
}
/**
* @Description: 获得一个月有多少天
* @Param: [startDate]
* @return: int
* @Date: 2020/10/28
*/
public static int getMonthDays(LocalDate startDate){
return startDate.lengthOfMonth();
}
/**
* @Description: 获得指定日期是当月第几天
* @Param: [startDate]
* @return: int
* @Date: 2020/10/28
*/
public static int getMonthOfDays(LocalDate startDate){
return startDate.getDayOfMonth();
}/**
* @Description: 获得指定日期有多少天
* @Param: [startDate]
* @return: int
* @Date: 2020/10/28
*/
public static int getYearDays(LocalDate startDate){
return startDate.lengthOfYear();
}
/**
* @Description: 获得指定日期是当年第几天
* @Param: [startDate]
* @return: int
* @Date: 2020/10/28
*/
public static int getYearOfDays(LocalDate startDate){
return startDate.getDayOfYear();
}
/**
* @Description: 判断是否跨年
* @Param: [startDate, endDate]
* @return: java.lang.Boolean
* @Date: 2020/10/28
*/
public static Boolean isNewYear(LocalDate startDate,LocalDate endDate){
long years= DateTemporal.getDiffYears(startDate,endDate);
//System.out.println("相差年数:"+years);
if(years>0){
return true;
}
LocalDate lastDateOfYear=startDate.with(TemporalAdjusters.lastDayOfYear());
//System.out.println("当前年最后一天:"+lastDateOfYear);
//判断是否在第一年最后一天之后,即如果是第二年
if(endDate.isAfter(lastDateOfYear)){
return true;
}else{
return false;
}
}
/**
* @Description: 日期减去天数
* @Param: [dateDeliver, diffDays]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate minusDays(LocalDate dateDeliver,int diffDays){
dateDeliver = dateDeliver.minusDays(diffDays);
return dateDeliver;
}
/**
* @Description: 日期增加天数plusDays(1),增加年数plusYears(1);//增加一年,增加月数plusMonth(1);
* @Param: [dateDeliver, diffDays]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate plusDays(LocalDate dateDeliver,int diffDays){
dateDeliver = dateDeliver.plusDays(diffDays);
return dateDeliver;
}
/**
* @Description: 获取当前日期,获取所在周星期一, 二, 三, 四..(周四为例)
* @Param: [dateDeliver]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getDayOfWeek(LocalDate dateDeliver){
dateDeliver=dateDeliver.with(DayOfWeek.THURSDAY);
return dateDeliver;
}
/**
* @Description: 获得N个月后的时间
* @Param: [dateDeliver, diffMonth]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getNextMonthLocalDate(LocalDate dateDeliver,int diffMonth) {
dateDeliver = dateDeliver.with((temporal) -> temporal.with(DAY_OF_MONTH, 1).plus(diffMonth, MONTHS));
return dateDeliver;
}
/**
* @Description: 获得N年后的时间
* @Param: [dateDeliver, diffYear]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getNextYearLocalDate(LocalDate dateDeliver,int diffYear) {
dateDeliver = dateDeliver.with((temporal) -> temporal.with(DAY_OF_YEAR, 1).plus(diffYear, YEARS));
return dateDeliver;
}
/**
* @Description: 得到年的天数
* @Param: [startDate]
* @return: long
* @Date: 2020/10/28
*/
public static long getLengthOfYear(LocalDate startDate){
return startDate.lengthOfYear();
}
/**
* @Description: 判断是否闰年
* @Param: [startDate]
* @return: java.lang.Boolean
* @Date: 2020/10/28
*/
public static Boolean isLeapYear(LocalDate startDate){
return startDate.isLeapYear();
}
/**
* @Description: 得到相差天数,如果想要总共天数,相差天数+1
* @Param: [startDate, endDate]
* @return: long
* @Date: 2020/10/28
*/
public static long getDiffDays(LocalDate startDate,LocalDate endDate){
long days=startDate.until(endDate, ChronoUnit.DAYS);
// 或者
// days= ChronoUnit.DAYS.between(startDate, endDate);
return days;
}
/**
* @Description: 得到相差月数,如果想要总共月数,相差月数+1
* @Param: [startDate, endDate]
* @return: long
* @Date: 2020/10/28
*/
public static long getDiffMonths(LocalDate startDate,LocalDate endDate){
long months=startDate.until(endDate, MONTHS);
return months;
}
/**
* @Description: 得到相差年数,如果想要总共年数,相差年数+1
* @Param: [startDate, endDate]
* @return: long
* @Date: 2020/10/28
*/
public static long getDiffYears(LocalDate startDate,LocalDate endDate){
long years=startDate.until(endDate, YEARS);
return years;
}
/**
* @Description: 获得下个月的第一天
* @Param: [dateDeliver]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getFirstDayOfNextMonth(LocalDate dateDeliver){
dateDeliver = dateDeliver.with(TemporalAdjusters.firstDayOfNextMonth());
return dateDeliver;
}
/**
* @Description: 获得下年的第一天
* @Param: [dateDeliver]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getFirstDayOfNextYear(LocalDate dateDeliver){
dateDeliver = dateDeliver.with(TemporalAdjusters.firstDayOfNextYear());
return dateDeliver;
}
/**
* @Description: 获得下年的第一天
* @Param: [dateDeliver]
* @return: java.time.LocalDate
* @Date: 2020/10/28
*/
public static LocalDate getFirstDayOfNextNYear(LocalDate dateDeliver,long N){
dateDeliver = dateDeliver.with(TemporalAdjusters.firstDayOfNextYear());
return dateDeliver;
}
}