Java8中LocalDate的使用方法工具类

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;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmlcq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值