【JAVA-日期计算工具类】用LocalDate日月年加减

import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/*
 * yyyyMMdd 格式的日期计算
 * @param
 * @return
 * @date 2020/12/3 10:30
 */
public class DateCalcuUtil {

    private static final Logger LOG = LogManager.getLogger();

    /*
     * 日期加减
     * @param [date, offset]
     * @return java.lang.String
     * @date 2020/12/3 10:32
     */
    public static String calculateDay(String date, int offset) {

        LocalDate thisDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        String retDate = thisDate.minusDays(-offset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        return retDate;
    }

    /*
     * 月份加减
     * @param [date, offset]
     * @return java.lang.String
     * @date 2020/12/3 10:32
     */
    public static String calculateMon (String date, int offset) {

        LocalDate thisDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        String retDate = thisDate.minusMonths(-offset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        return retDate;
    }

    /*
     * 年份加减
     * @param [date, offset]
     * @return java.lang.String
     * @date 2020/12/3 10:32
     */
    public static String calculateYear (String date, int offset) {

        LocalDate thisDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        String retDate = thisDate.minusYears(-offset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        return retDate;
    }

    /*
     * 本月第一天
     * @param []
     * @return java.lang.String
     * @date 2020/12/17 9:49
     */
    public static String getCurrMonthFirst(){

        return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

    /*
     * 今年第一天
     * @param []
     * @return java.lang.String
     * @date 2020/12/17 9:49
     */
    public static String getCurrYearFirst(){

        return LocalDate.now().with(TemporalAdjusters.firstDayOfYear()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

    /*
     *  计算时间段内的所有日期,从小到大(包括两端点)
     * @param [dBegin, dEnd] yyyyMMdd
     * @return java.util.List
     * @date 2020/12/7 15:18
     */
    public static List findDates(String dBegin, String dEnd) {

        LocalDate startDate = LocalDate.parse(dBegin, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        LocalDate endDate = LocalDate.parse(dEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        List result = new ArrayList<>();
        if(endDate.compareTo(startDate) < 0 ){
            return  result;
        }
        while (true){
            result.add(startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            if(startDate.compareTo(endDate) >= 0){
                break;
            }
            startDate = startDate.plusDays(1);
        }

        return result;
    }

    /**
     *
     * date8To10 将yyyyMMdd格式的字符串日期转换成yyyy-MM-dd格式的字符串日期
     *
     * @param date 待转换的日期字字符串
     * @return
     */
    public static String date8To10(String date)
    {
        return date8To10(date, "-");
    }

    /**
     *
     * date8To10 将yyyyMMdd格式的字符串日期转换成指定格式的字符串日期
     *
     * @param date 待转换的日期字字符串
     * @param separator 分隔符"-"、"/"、"."
     * @return
     */
    public static String date8To10(String date, String separator)
    {
        if(StringUtils.isEmpty(date))
        {
            return date;
        }

        if(date.length() != 8)
        {
            return date;
        }
        //年
        String year = date.substring(0, 4);

        //月
        String month = date.substring(4, 6);

        //日
        String day = date.substring(6);

        return new StringBuilder().append(year).append(separator).append(month).append(separator).append(day).toString();
    }


}

你可能感兴趣的:(Java后端,java)