日期时间操作的工具类


import com.shine.common.constant.Constant;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.*;

/**
 * Description:日期时间操作的工具类
 *
 */
public class DateUtil {
    /**
     * 日期格式(yyyy-MM-dd)
     */
    public static final String YYYY_MM_DD = "yyyy-MM-dd";
    /**
     * 日期格式(yyyy-MM-dd HH:mm:ss)
     */
    public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    /**
     * 日期格式(yyyy年MM月dd日)
     */
    public static final String YYYY_MM_DD_CN = "yyyy年MM月dd日";

    /**
     * 日期格式(yyyy-MM)
     */
    public static final String YYYY_MM = "yyyy-MM";
    /**
     * 日期格式(yyyy-MM)
     */
    public static final String YYYY_MM_CN = "yyyy年MM月";


    /**
     * 日期格式(MM/dd)
     */
    public static final String MM_DD = "MM/dd";

    /**
     * 日期格式(yyyyMMddHHmm)
     */
    public static final String YYYY_MM_DDS = "yyyy/MM/dd";


    /**
     * DateFormat缓存
     */
    private static Map<String, DateFormat> dateFormatMap = new HashMap<String, DateFormat>();

    /**
     * 获取DateFormat
     *
     * @param formatStr
     * @return
     */
    public static DateFormat getDateFormat(String formatStr) {
        synchronized (dateFormatMap) {
            DateFormat df = dateFormatMap.get(formatStr);
            if (df == null) {
                df = new SimpleDateFormat(formatStr);
                dateFormatMap.put(formatStr, df);
            }
            return df;
        }
    }

    public static Date getDate() {
        return Calendar.getInstance().getTime();
    }

    public static LocalDateTime getLocalDateTime(Date date){
        LocalDateTime localDateTime = null;
        if(date!=null){
            localDateTime = date.toInstant().atZone( ZoneId.systemDefault() ).toLocalDateTime();
        }
        return localDateTime;

    }

    /**
     * 按照默认formatStr的格式,转化dateTimeStr为Date类型 dateTimeStr必须是formatStr的形式
     *
     * @param dateTimeStr
     * @param formatStr
     * @return
     */
    public static Date getDate(String dateTimeStr, String formatStr) {
        try {
            if (dateTimeStr == null || dateTimeStr.equals("")) {
                return null;
            }
            synchronized (dateFormatMap) {
                DateFormat df = dateFormatMap.get(formatStr);
                if (df == null) {
                    df = new SimpleDateFormat(formatStr);
                    dateFormatMap.put(formatStr, df);
                }
                return df.parse(dateTimeStr);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 转化dateTimeStr为Date类型
     *
     * @param dateTimeStr
     * @return
     */
    public static Date convertDate(String dateTimeStr) {
        try {
            if (dateTimeStr == null || dateTimeStr.equals("")) {
                return null;
            }
            DateFormat sdf = DateUtil.getDateFormat(YYYY_MM_DD_HH_MM_SS);
            Date d = sdf.parse(dateTimeStr);
            return d;
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 转化dateTimeStr为Date类型
     *
     * @param dateTimeStr
     * @return
     */
    public static Date convertDateMonth(String dateTimeStr) {
        try {
            if (dateTimeStr == null || dateTimeStr.equals("")) {
                return null;
            }
            DateFormat sdf = DateUtil.getDateFormat(YYYY_MM);
            Date d = sdf.parse(dateTimeStr);
            return d;
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 按照默认显示日期时间的格式"yyyy-MM-dd",转化dateTimeStr为Date类型 dateTimeStr必须是"yyyy-MM-dd"的形式
     *
     * @param dateTimeStr
     * @return
     */
    public static Date getDate(String dateTimeStr) {
        return getDate(dateTimeStr, YYYY_MM_DD);
    }

    /**
     * 将YYYYMMDD转换成Date日期
     *
     * @param date
     * @return
     * @throws Exception
     */
    public static Date transferDate(String date) throws Exception {
        if (date == null || date.length() < 1) {
            return null;
        }

        if (date.length() != 8) {
            throw new Exception("日期格式错误");
        }
        String con = "-";

        String yyyy = date.substring(0, 4);
        String mm = date.substring(4, 6);
        String dd = date.substring(6, 8);

        int month = Integer.parseInt(mm);
        int day = Integer.parseInt(dd);
        if (month < 1 || month > 12 || day < 1 || day > 31) {
            throw new Exception("日期格式错误");
        }

        String str = yyyy + con + mm + con + dd;
        return DateUtil.getDate(str, DateUtil.YYYY_MM_DD);
    }

    /**
     * 将Date转换成字符串“yyyy-mm-dd”的字符串
     *
     * @param date
     * @return
     */
    public static String dateToString(Date date) {
        return dateToDateString(date, YYYY_MM_DD);
    }

    /**
     * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
     *
     * @param date
     * @return
     */
    public static String dateToDateString(Date date) {
        return dateToDateString(date, YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * 将Date转换成formatStr格式的字符串
     *
     * @param date
     * @param formatStr
     * @return
     */
    public static String dateToDateString(Date date, String formatStr) {
        DateFormat df = getDateFormat(formatStr);
        return df.format(date);
    }

    /**
     * 将String转换成formatStr格式的字符串
     *
     * @param date
     * @param formatStr1
     * @param formatStr2
     * @return
     */
    public static String stringToDateString(String date, String formatStr1, String formatStr2) {
        Date d = getDate(date, formatStr1);
        DateFormat df = getDateFormat(formatStr2);
        return df.format(d);
    }

    /**
     * 获取当前日期yyyy-MM-dd的形式
     *
     * @return
     */
    public static String getCurDate() {
        return dateToDateString(new Date(), YYYY_MM_DD);
    }

    /**
     * 获取当前日期
     *
     * @return
     */
    public static String getCurDate(String formatStr) {
        return dateToDateString(new Date(), formatStr);
    }

    /**
     * 获取当前日期yyyy年MM月dd日的形式
     *
     * @return
     */
    public static String getCurCNDate() {
        return dateToDateString(new Date(), YYYY_MM_DD);
    }

    /**
     * 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式
     *
     * @return
     */
    public static String getCurDateTime() {
        return dateToDateString(new Date(), YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * 获取当前日期时间yyyy/MM/dd HH:mm:ss的形式
     *
     * @return
     */
    public static String getCurDateTimeOracle() {
        return dateToDateString(new Date(), YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
     *
     * @return
     */
    public static String getCurZhCNDateTime() {
        return dateToDateString(new Date(), YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
     *
     * @param time1
     * @param time2
     * @return
     */
    public static long compareDateStr(String time1, String time2) {
        Date d1 = getDate(time1);
        Date d2 = getDate(time2);
        return d2.getTime() - d1.getTime();
    }

    /**
     * 比较任意格式时间相差毫秒数
     *
     * @param time1
     * @param time2
     * @param format
     * @return
     */
    public static long compareDateStr(String time1, String time2, String format) {
        Date d1 = getDate(time1, format);
        Date d2 = getDate(time2, format);
        return d2.getTime() - d1.getTime();
    }

    /**
     * 比较起始时间与当前时间相差毫秒数
     *
     * @param time
     * @param format
     * @return
     */
    public static long compareDateNow(String time, String format) {
        Date date = getDate(time, format);
        return getCurrentTimeMillis() - date.getTime();
    }

    /**
     * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
     *
     * @param time1
     * @param time2
     * @return
     */
    public static long compareDateStr(Date time1, Date time2) {
        return time2.getTime() - time1.getTime();
    }

    /**
     * nows时间大于date时间 为true
     *
     * @param nows
     * @param date
     * @return
     */
    public static boolean isTimeBefor(Date nows, Date date) {
        long hous = nows.getTime() - date.getTime();
        if (hous > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 将小时数换算成返回以毫秒为单位的时间
     *
     * @param hours
     * @return
     */
    public static long getMicroSec(BigDecimal hours) {
        BigDecimal bd;
        bd = hours.multiply(new BigDecimal(3600 * 1000));
        return bd.longValue();
    }

    /**
     * 获取当前日期years年后的一个(formatStr)的字符串
     *
     * @param formatStr
     * @return
     */
    public static String getDateStringOfYear(int years, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(new Date());
        now.add(Calendar.YEAR, years);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获取当前日期mon月后的一个(formatStr)的字符串
     *
     * @param months
     * @param formatStr
     * @return
     */
    public static String getDateStringOfMon(int months, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(new Date());
        now.add(Calendar.MONTH, months);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获取当前日期days天后的一个(formatStr)的字符串
     *
     * @param days
     * @param formatStr
     * @return
     */
    public static String getDateStringOfDay(int days, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(new Date());
        now.add(Calendar.DATE, days);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获取当前日期hours小时后的一个(formatStr)的字符串
     *
     * @param hours
     * @param formatStr
     * @return
     */
    public static String getDateStringOfHour(int hours, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(new Date());
        now.add(Calendar.HOUR_OF_DAY, hours);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获取指定日期mon月后的一个(formatStr)的字符串
     *
     * @param date
     * @param formatStr
     * @return
     */
    public static String getDateOfMon(String date, int mon, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(DateUtil.getDate(date, formatStr));
        now.add(Calendar.MONTH, mon);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获取指定日期day天后的一个(formatStr)的字符串
     *
     * @param date
     * @param formatStr
     * @return
     */
    public static String getDateOfDay(String date, int day, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(DateUtil.getDate(date, formatStr));
        now.add(Calendar.DATE, day);
        return dateToDateString(now.getTime(), formatStr);
    }

    public static Date getDate(Date beginDate, int ds) {
        if (ds == 0) {
            return new Date();
        }
        try {
            SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
            Calendar date = Calendar.getInstance();
            date.setTime(beginDate);
            date.set(Calendar.DATE, date.get(Calendar.DATE) - ds);
            Date endDate = dft.parse(dft.format(date.getTime()));
            return endDate;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new Date();
    }

    public static String getAfterNDays(Date date, int n, String formateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat(formateStr);
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, n);
        return sdf.format(calendar.getTime());
    }

    public static Date getAfterNDays4Date(Date date, int n) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, n);
        return calendar.getTime();
    }

    /**
     * 获取指定日期mins分钟后的一个(formatStr)的字符串
     *
     * @param date
     * @param mins
     * @param formatStr
     * @return
     */
    public static String getDateOfMin(String date, int mins, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(DateUtil.getDate(date, formatStr));
        now.add(Calendar.SECOND, mins * 60);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获取指定日期mins分钟后的一个日期
     *
     * @param date
     * @param mins
     * @return
     */
    public static Date getDateOfMin(Date date, int mins) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(date);
        now.add(Calendar.SECOND, mins * 60);
        return now.getTime();
    }

    /**
     * 获取当前日期mins分钟后的一个(formatStr)的字符串
     *
     * @param mins
     * @param formatStr
     * @return
     */
    public static String getDateStringOfMin(int mins, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(new Date());
        now.add(Calendar.MINUTE, mins);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获取当前日期mins分钟后的一个日期
     *
     * @param mins
     * @return
     */
    public static Date getDateOfMin(int mins) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(new Date());
        now.add(Calendar.MINUTE, mins);
        return now.getTime();
    }

    /**
     * 获取当前日期sec秒后的一个(formatStr)的字符串
     *
     * @param sec
     * @param formatStr
     * @return
     */
    public static String getDateStringOfSec(int sec, String formatStr) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(new Date());
        now.add(Calendar.SECOND, sec);
        return dateToDateString(now.getTime(), formatStr);
    }

    /**
     * 获得指定日期月份的天数
     *
     * @return
     */
    public static int getMonthDay(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.getActualMaximum(Calendar.DAY_OF_MONTH);

    }

    /**
     * 获得系统当前月份的天数
     *
     * @return
     */
    public static int getCurentMonthDay() {
        Date date = Calendar.getInstance().getTime();
        return getMonthDay(date);
    }

    /**
     * 获得指定日期月份的天数 yyyy-mm-dd
     *
     * @return
     */
    public static int getMonthDay(String date) {
        Date strDate = getDate(date, YYYY_MM_DD);
        return getMonthDay(strDate);
    }

    /**
     * 获取19xx,20xx形式的年
     *
     * @param d
     * @return
     */
    public static int getYear(Date d) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.YEAR);
    }

    /**
     * 获取月份,1-12月
     *
     * @param d
     * @return
     */
    public static int getMonth(Date d) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.MONTH) + 1;
    }

    /**
     * 获取xxxx-xx-xx的日
     *
     * @param d
     * @return
     */
    public static int getDay(Date d) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 获取Date中的小时(24小时)
     *
     * @param d
     * @return
     */
    public static int getHour(Date d) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 获取Date中的分钟
     *
     * @param d
     * @return
     */
    public static int getMin(Date d) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.MINUTE);
    }

    /**
     * 获取Date中的秒
     *
     * @param d
     * @return
     */
    public static int getSecond(Date d) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.SECOND);
    }

    /**
     * 得到本周周一
     *
     * @return yyyy-MM-dd
     */
    public static String getMondayOfThisWeek() {
        Calendar c = Calendar.getInstance();
        int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (day_of_week == 0) {
            day_of_week = 7;
        }
        c.add(Calendar.DATE, -day_of_week + 1);
        return dateToDateString(c.getTime(), YYYY_MM_DD);
    }

    /**
     * 得到本周周日
     *
     * @return yyyy-MM-dd
     */
    public static String getSundayOfThisWeek() {
        Calendar c = Calendar.getInstance();
        int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (day_of_week == 0) {
            day_of_week = 7;
        }
        c.add(Calendar.DATE, -day_of_week + 7);
        return dateToDateString(c.getTime());
    }

    /**
     * 得到本周周(*)
     *
     * @return yyyy-MM-dd
     */
    public static String getDayOfThisWeek(int num) {
        Calendar c = Calendar.getInstance();
        int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (day_of_week == 0) {
            day_of_week = 7;
        }
        c.add(Calendar.DATE, -day_of_week + num);
        return dateToDateString(c.getTime(), YYYY_MM_DD);
    }

    /**
     * 得到本月指定天
     *
     * @return yyyy-MM-dd
     */
    public static String getDayOfThisMoon(String num) {
        String date = dateToDateString(new Date(), YYYY_MM);
        date = date + "-" + num;
        return date;
    }

    /**
     * 获取两个日期相差的天数
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static long getQuotByDays(String beginDate, String endDate) {
        long quot = 0;
        DateFormat df = getDateFormat(YYYY_MM_DD);
        try {
            Date d1 = df.parse(beginDate);
            Date d2 = df.parse(endDate);
            quot = d2.getTime() - d1.getTime();
            quot = quot / 1000 / 60 / 60 / 24;
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        return quot;
    }

    /**
     * 根据日期追加的天数,得到一个新日期
     *
     * @param date
     * @param days
     * @return
     */
    public static String getDateAddDay(String date, int days, String format) {
        DateFormat df = getDateFormat(format);
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(df.parse(date));
            cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) + days);

            date = df.format(cal.getTime());
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        return date;
    }

    /**
     * 获取当前月的最后一天
     *
     * @return
     */
    public static Date getLastDayOfCurrMonth() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, 1);
        cal.set(Calendar.DAY_OF_MONTH, 0);

        return cal.getTime();
    }

    /**
     * 获取指定年月的第一天
     *
     * @param year
     * @param month
     * @return
     */
    public static String getFirstDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        // 设置年份
        cal.set(Calendar.YEAR, year);
        // 设置月份
        cal.set(Calendar.MONTH, month - 1);
        // 获取某月最小天数
        int lastDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
        // 设置日历中月份的最大天数
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        // 格式化日期
        DateFormat df = getDateFormat(YYYY_MM_DD);
        return df.format(cal.getTime());
    }

    /**
     * 获取指定年月的第一天
     *
     * @param year
     * @param month
     * @return
     */
    public static String getLastDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        // 设置年份
        cal.set(Calendar.YEAR, year);
        // 设置月份
        cal.set(Calendar.MONTH, month - 1);
        // 获取某月最大天数
        int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        // 设置日历中月份的最大天数
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        // 格式化日期
        DateFormat df = getDateFormat(YYYY_MM_DD);
        return df.format(cal.getTime());
    }

    /**
     * 获取昨天日期
     *
     * @param date
     * @return
     * @throws ParseException
     */
    public static String getYesterday(Date date) throws ParseException {
        DateFormat df = getDateFormat(YYYY_MM_DD);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(df.parse(df.format(date)));
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        return df.format(calendar.getTime());
    }

    /**
     * 10位时间戳转时间
     *
     * @param dateInt
     * @return
     */
    public static String getIntToStr(String dateInt, String format) {
        DateFormat df = getDateFormat(format);
        long times = Integer.parseInt(dateInt) * 1000L;
        Date date = new Date(times);
        return df.format(date);
    }

    /**
     * 获取 10位时间戳
     *
     * @return
     */
    public static Integer getDateInt() {
        return (int) (getCurrentTimeMillis() / 1000);
    }

    /**
     * 获得系统的时间,单位为毫秒
     *
     * @return
     */
    public static long getCurrentTimeMillis() {
        return System.currentTimeMillis();
    }

    /**
     * 13位时间戳转时间
     *
     * @param time
     * @param format
     * @return
     */
    public static String getLongToStr(long time, String format) {
        Date date = new Date(time);
        return dateToDateString(date, format);
    }

    /**
     * 获取两个小时间的间隔秒杀
     *
     * @param start
     * @param end
     * @return
     */
    public static int getIntervalSec(int start, int end) {
        return (end - start) * 60 * 60;
    }

    /**
     * 毫秒时间戳毫秒加小数点
     *
     * @param time
     * @return
     */
    public static String getMillsStr(long time) {
        String timeStr = String.valueOf(time);
        String suffix = timeStr.substring(0, timeStr.length() - 3);
        String prefix = timeStr.substring(timeStr.length() - 3, timeStr.length());
        return suffix + "." + prefix;
    }

    /**
     * 带小数点的毫秒时间戳转时间格式
     *
     * @param timeStr
     * @param formatStr
     * @return
     */
    public static String longToString(String timeStr, String formatStr) {
        long times = Long.parseLong(timeStr.replace(".", ""));
        Date date = new Date(times);
        return dateToDateString(date, formatStr);
    }

    /**
     * 获取当天起始时间
     *
     * @return
     */
    public static Long getTodayTime() {
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(Calendar.HOUR_OF_DAY, 0);
        todayStart.set(Calendar.MINUTE, 0);
        todayStart.set(Calendar.SECOND, 0);
        todayStart.set(Calendar.MILLISECOND, 0);
        return todayStart.getTime().getTime();
    }

    public static Integer getTodayInt() {
        return (int) (getTodayTime() / 1000);
    }

    /**
     * 获取当天结束时间
     *
     * @return
     */
    public static Long getEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.HOUR, 23);
        todayEnd.set(Calendar.MINUTE, 59);
        todayEnd.set(Calendar.SECOND, 59);
        todayEnd.set(Calendar.MILLISECOND, 999);
        return todayEnd.getTime().getTime();
    }

    public static Integer getTomorrowInt() {
        return (int) (getTomorrowTime() / 1000);
    }

    /**
     * 获取第二天起始时间
     *
     * @return
     */
    public static Long getTomorrowTime() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        cal.add(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime().getTime();
    }

    /**
     * 获取当天指定小时的时间
     *
     * @param hour
     * @return
     */
    public static Long getPointHourTime(int hour) {
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(Calendar.HOUR_OF_DAY, hour);
        todayStart.set(Calendar.MINUTE, 0);
        todayStart.set(Calendar.SECOND, 0);
        todayStart.set(Calendar.MILLISECOND, 0);
        return todayStart.getTime().getTime();
    }

    /**
     * 获取当天n天后的h小时
     *
     * @param days
     * @param hour
     * @return
     */
    public static Long getPointDateHourTime(int days, int hour) {
        Calendar todayStart = Calendar.getInstance();
        todayStart.add(Calendar.DATE, days);
        todayStart.set(Calendar.HOUR_OF_DAY, hour);
        todayStart.set(Calendar.MINUTE, 0);
        todayStart.set(Calendar.SECOND, 0);
        todayStart.set(Calendar.MILLISECOND, 0);
        return todayStart.getTime().getTime();
    }

    /**
     * 时分秒转成秒数
     *
     * @param time
     * @return
     */
    public static Integer minTosec(String time) {
        if (time.length() <= 5) {
            time += ":00";
        }
        int index1 = time.indexOf(":");
        int index2 = time.indexOf(":", index1 + 1);
        int mi = Integer.parseInt(time.substring(0, index1));
        int ss = Integer.parseInt(time.substring(index1 + 1, index2));
        return mi * 60 + ss;
    }

    public static boolean isDate(String dateTimeStr, String formatStr) {
        DateFormat df = getDateFormat(formatStr);
        try {
            df.parse(dateTimeStr);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     *
     * @param strDate
     * @param strDateBegin
     * @param strDateEnd
     * @return
     */
    public static boolean isInDate(String strDate, String strDateBegin, String strDateEnd) {
        // 截取当前时间时分秒
        int strDateH = Integer.parseInt(strDate.substring(11, 13));
        int strDateM = Integer.parseInt(strDate.substring(14, 16));
        int strDateS = Integer.parseInt(strDate.substring(17, 19));
        // 截取开始时间时分秒
        int strDateBeginH = Integer.parseInt(strDateBegin.substring(0, 2));
        int strDateBeginM = Integer.parseInt(strDateBegin.substring(3, 5));
        int strDateBeginS = Integer.parseInt(strDateBegin.substring(6, 8));
        // 截取结束时间时分秒
        int strDateEndH = Integer.parseInt(strDateEnd.substring(0, 2));
        int strDateEndM = Integer.parseInt(strDateEnd.substring(3, 5));
        int strDateEndS = Integer.parseInt(strDateEnd.substring(6, 8));
        if ((strDateH >= strDateBeginH && strDateH <= strDateEndH)) {
            // 当前时间小时数在开始时间和结束时间小时数之间
            if (strDateH > strDateBeginH && strDateH < strDateEndH) {
                return true;
                // 当前时间小时数等于开始时间小时数,分钟数在开始和结束之间
            } else if (strDateH == strDateBeginH && strDateM >= strDateBeginM && strDateM <= strDateEndM) {
                return true;
                // 当前时间小时数等于开始时间小时数,分钟数等于开始时间分钟数,秒数在开始和结束之间
            } else if (strDateH == strDateBeginH && strDateM == strDateBeginM && strDateS >= strDateBeginS && strDateS <= strDateEndS) {
                return true;
            }
            // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数小等于结束时间分钟数
            else if (strDateH >= strDateBeginH && strDateH == strDateEndH && strDateM <= strDateEndM) {
                return true;
                // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数等于结束时间分钟数,秒数小等于结束时间秒数
            } else if (strDateH >= strDateBeginH && strDateH == strDateEndH && strDateM == strDateEndM && strDateS <= strDateEndS) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * 判断时间是否在时间段内
     *
     * @param date         当前时间 yyyy-MM-dd HH:mm:ss
     * @param strDateBegin 开始时间 00:00:00
     * @param strDateEnd   结束时间 00:05:00
     * @return
     */
    public static boolean isInDate(Date date, String strDateBegin, String strDateEnd) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = sdf.format(date);
        // 截取当前时间时分秒
        int strDateH = Integer.parseInt(strDate.substring(11, 13));
        int strDateM = Integer.parseInt(strDate.substring(14, 16));
        int strDateS = Integer.parseInt(strDate.substring(17, 19));
        // 截取开始时间时分秒
        int strDateBeginH = Integer.parseInt(strDateBegin.substring(0, 2));
        int strDateBeginM = Integer.parseInt(strDateBegin.substring(3, 5));
        int strDateBeginS = Integer.parseInt(strDateBegin.substring(6, 8));
        // 截取结束时间时分秒
        int strDateEndH = Integer.parseInt(strDateEnd.substring(0, 2));
        int strDateEndM = Integer.parseInt(strDateEnd.substring(3, 5));
        int strDateEndS = Integer.parseInt(strDateEnd.substring(6, 8));
        if ((strDateH >= strDateBeginH && strDateH <= strDateEndH)) {
            // 当前时间小时数在开始时间和结束时间小时数之间
            if (strDateH > strDateBeginH && strDateH < strDateEndH) {
                return true;
                // 当前时间小时数等于开始时间小时数,分钟数在开始和结束之间
            } else if (strDateH == strDateBeginH && strDateM >= strDateBeginM && strDateM <= strDateEndM) {
                return true;
                // 当前时间小时数等于开始时间小时数,分钟数等于开始时间分钟数,秒数在开始和结束之间
            } else if (strDateH == strDateBeginH && strDateM == strDateBeginM && strDateS >= strDateBeginS && strDateS <= strDateEndS) {
                return true;
            }
            // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数小等于结束时间分钟数
            else if (strDateH >= strDateBeginH && strDateH == strDateEndH && strDateM <= strDateEndM) {
                return true;
                // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数等于结束时间分钟数,秒数小等于结束时间秒数
            } else if (strDateH >= strDateBeginH && strDateH == strDateEndH && strDateM == strDateEndM && strDateS <= strDateEndS) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public static boolean isInTime(int time, int begin, int end) {
        if (time >= begin && time < end) {
            return true;
        }
        return false;
    }

    public static int getMinutest(String begin, String format) {
        String nowMinutes = DateUtil.getCurDate("HH:mm");
        long time = DateUtil.compareDateStr("09:00", nowMinutes, "HH:mm");
        return (int) time;
    }

    /**
     * 取得到当前时间的整点时间段
     *
     * @param
     * @return List<String>
     */
    public static List<String> getTiemSection(int step) {
        // 1分钟一次1天有24次
        int Ahoursmin = 24 / step;
        // 开始时间为0秒,第一次循环为900秒
        int AecondValueZero = 0;
        // 开始时间为-3600秒,第一次循环为0秒 ,控制步长(半个小时-1800,一个小时-3600)
        int AecondValueNineHundred = -3600 * step;
        // Map<String,String> map = new HashMap<String,String>();
        List<String> timeList = new ArrayList<String>();
        // 循环时间为00:00~23:30
        for (int i = 0; i < Ahoursmin; i++) {

            // 每次循环之前加60分钟 控制步长(半个小时+1800,一个小时+3600)
            AecondValueZero = AecondValueZero + 3600 * step;
            // 每次循环之前加60分钟 控制步长(半个小时+1800,一个小时+3600)
            AecondValueNineHundred = AecondValueNineHundred + 3600 * step;
            // 初始时间都为00:00
            String ATimeInitialFront = "00:00";
            String ATimeInitialAfter = "00:00";

            // 判断初始秒树是否为0
            if (AecondValueZero != 0) {
                // 换算成小时
                int AHourst = (Integer.valueOf(AecondValueZero) / 3600);
                // 换算成分钟
                int Aminute = (Integer.valueOf(AecondValueZero) % 3600 / 60);
                // 换算成秒
//         int Asecond = ((Integer.valueOf(AecondValueZero) % 3600 % 60 / 2));
                // 把生成的时间转化成字符串
                String hourst = String.valueOf(AHourst);
                String minute = String.valueOf(Aminute);
                // 如果小时的长度等于1个,在其前面加个0
                if (hourst.length() == 1) {
                    hourst = "0" + hourst;
                }
                // 如果小时的到达24点让其初始化为00
                if ("24".equals(hourst)) {
                    hourst = "00";
                }
                // 如果分钟的长度等于1个,在其前面加个0
                if (minute.length() == 1) {
                    minute = "0" + minute;
                }
                // 拼接小时和分钟
                ATimeInitialAfter = hourst + ":" + minute; // + ":" + Asecond;
            }
            // 循环时间为00:30~00:00
            if (AecondValueNineHundred != 0) {
                // 换算成小时
                int AHourst = (Integer.valueOf(AecondValueNineHundred) / 3600);
                // 换算成分钟
                int Aminute = (Integer.valueOf(AecondValueNineHundred) % 3600 / 60);
                // 换算成秒
                // int Asecond = ((Integer.valueOf(AecondValueNineHundred) % 3600 % 60 / 2));
                // 把生成的时间转化成字符串
                String hourst = String.valueOf(AHourst);
                String minute = String.valueOf(Aminute);
                // 如果小时的长度等于1个,在其前面加个0
                if (hourst.length() == 1) {
                    hourst = "0" + hourst;
                }
                // 如果小时的到达24点让其初始化为00
                if (("24").equals(hourst)) {
                    hourst = "00";
                }
                // 如果分钟的长度等于1个,在其前面加个0
                if (minute.length() == 1) {
                    minute = "0" + minute;
                }
                // 拼接小时和分钟
                ATimeInitialFront = hourst + ":" + minute; // + ":" + Asecond;
            }
            // 将时间和所有字段放入map中初始为0
            Calendar now = Calendar.getInstance();
            int hour = now.get(Calendar.HOUR_OF_DAY);
            // map.put("section", ATimeInitialFront+"~"+ATimeInitialAfter);
            timeList.add(ATimeInitialFront + "~" + ATimeInitialAfter);
            if (hour == i * step + 1) {
                break;
            }
        }

        return timeList;
    }

    /**
     * 检查时间是否符合格式
     *
     * @param dateStr   时间字符串
     * @param formatStr 时间格式字符串
     * @return
     */
    public static boolean checkStringFormat(String dateStr, String formatStr) {
        if (StringUtils.isEmpty(dateStr) || StringUtils.isEmpty(formatStr)) {
            return false;
        }
        DateFormat df = getDateFormat(formatStr);
        try {
            df.setLenient(false);
            df.parse(dateStr);
        } catch (ParseException e) {
            return false;
        }
        return true;
    }

    /**
     * 检查时间是否符合格式(默认yyyy-MM-dd)
     *
     * @param dateStr
     * @return
     */
    public static boolean checkStringFormat(String dateStr) {
        return checkStringFormat(dateStr, YYYY_MM_DD);
    }

    /**
     * 日期转换对应周几
     *
     * @param datetime 日期
     * @return
     */
    public static String dateToWeek(String datetime) {
        SimpleDateFormat f = new SimpleDateFormat(YYYY_MM_DD);
        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        Calendar cal = Calendar.getInstance(); // 获得一个日历
        Date datet = null;
        try {
            datet = f.parse(datetime);
        } catch (java.text.ParseException e) {
            e.printStackTrace();
        }
        cal.setTime(datet);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
        if (w < 0) {
            w = 0;
        }
        return weekDays[w];
    }

    /**
     * 计算到期时间
     *
     * @param date
     * @param step
     * @return
     */
    public static Date reckonDate(Date date, int step) {
        return new Date(date.getTime() + (-step) * 24 * 60 * 60 * 1000L);
    }

    public static String getNextMonth() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, 1);
        return dateToDateString(calendar.getTime(), YYYY_MM);

    }

    public static String getThistMonth() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return dateToDateString(calendar.getTime(), YYYY_MM);
    }

    public static String getPrecedingMonth() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, -1);
        return dateToDateString(calendar.getTime(), YYYY_MM);
    }

    public static String getPrecedingMonthCN() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, -1);
        return dateToDateString(calendar.getTime(), YYYY_MM_CN);
    }

    public static boolean isValidDate(String str, String formatStr) {
        boolean convertSuccess = true;
        // 指定日期格式
        SimpleDateFormat format = new SimpleDateFormat(formatStr);
        try {
            format.setLenient(false);
            format.parse(str);
        } catch (ParseException e) {
            convertSuccess = false;
        }
        return convertSuccess;
    }

    public static Date getWorkingDay(String monthly, int num) {
        Date date = DateUtil.getDate(monthly, DateUtil.YYYY_MM);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, 1);
        int i = 0;
        while (i < num) {
            int day = cal.get(Calendar.DAY_OF_WEEK);
            if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
                i++;
            }
            cal.add(Calendar.DATE, 1);// 日期加1
        }
        return cal.getTime();
    }

    public static Date getThisMonthWorkingDay(String monthly, int num) {
        Date date = DateUtil.getDate(monthly, DateUtil.YYYY_MM);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int i = 0;
        while (i < num) {
            int day = cal.get(Calendar.DAY_OF_WEEK);
            if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
                i++;
            }
            cal.add(Calendar.DATE, 1);// 日期加1
        }
        return cal.getTime();
    }

    /*
     *功能描述   每个月十号
     * @param monthly
     * @param num
     * @return java.util.Date
     */
    public static Date getNextMonthDay(String monthly, int num) {
        Date date = DateUtil.getDate(monthly, DateUtil.YYYY_MM);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, num);// 日期加10
        return cal.getTime();
    }

    public static Date getNextMonth(String monthly) {
        Date date = DateUtil.getDate(monthly, DateUtil.YYYY_MM);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, 1);
        return cal.getTime();
    }

    public static Date getThistMonth4Date() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }

    public static int differentDaysByMillisecond(Date date1, Date date2) {
        return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
    }

    public static String convert(String time) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
            Date date = sdf.parse(time);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.MONTH, 0);
            return sdf2.format(calendar.getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return "";
    }

    public static List<String> getpreceding12months(String monthly, int i) {
        if (StringUtils.isBlank(monthly)) {
            monthly = dateToDateString(new Date(), YYYY_MM);
        }
        Date date = DateUtil.getDate(monthly, DateUtil.YYYY_MM);
        List<String> list = new ArrayList<String>();
        while (i > 0) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.MONTH, -i + 1);
            list.add(dateToDateString(cal.getTime(), YYYY_MM));
            i--;
        }
        return list;
    }

    /**
     * 获取上个月的时间
     *
     * @return
     */
    public static Date getPrecedingDate() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, -1);
        return Calendar.getInstance().getTime();
    }

    /**
     * 通过Calendar类正确计算两日期之间的间隔
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static int getTimeDistance(Date beginDate, Date endDate) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            beginDate = sdf.parse(sdf.format(beginDate));
            endDate = sdf.parse(sdf.format(endDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(beginDate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(endDate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));
    }


    /**
     * 计算两个时间差多少分钟
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static Integer getTimeMinutes(LocalDateTime beginDate, LocalDateTime endDate) {
        Duration duration = Duration.between(beginDate, endDate);
        long minutes = duration.toMinutes();//相差的分钟数
        System.out.println(minutes);
        return Integer.valueOf(String.valueOf(minutes));
    }


    public static List<String> getStatetime(Integer day) throws ParseException {
        SimpleDateFormat mmdd = new SimpleDateFormat(MM_DD);
        //SimpleDateFormat mmdd = new SimpleDateFormat(yyyy_MM_dd);
        List<String> preDayList = new ArrayList<>();
        for (int i = 0; i < day; i++) {
            Calendar c = Calendar.getInstance();
            c.add(Calendar.DATE, -i);
            Date time = c.getTime();
            preDayList.add(mmdd.format(time));
        }
        return preDayList;
    }


    /**
     * @描述:LocalDate转换成Date
     * @参数 [localDate]
     * @返回值 java.util.Date
     * @创建时间 2020/4/15
     */
    public static Date localDate2Date(LocalDate localDate) {

        if (null == localDate) {
            return null;
        }
        ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
        return Date.from(zonedDateTime.toInstant());
    }

    /**
     * @描述: flag:1 返回给前端 yyyy/mm/dd 2 :后台调用返回格式 yyyy-mm-dd
     * 时间计算 默认获取从周日开始的本周所有日期
     * @创建时间2020/4/21
     */
    public static List<String> preDayList(String flag, String time) {
        List<String> preDayList = new ArrayList<>();
        for (int i = 0; i < 7; i++) {
            Calendar c = Calendar.getInstance();
            if (StringUtils.isNotEmpty(time)) {
                c.setTime(DateUtil.getDate(time));
            }
            c.set(Calendar.DAY_OF_WEEK, 1);
            c.add(Calendar.DATE, +i);
            if (Constant.GENERAL_1.equals(flag)) {
                SimpleDateFormat mmdd = new SimpleDateFormat(YYYY_MM_DDS);
                preDayList.add(mmdd.format(c.getTime()));
            } else {
                Instant instant = c.getTime().toInstant();
                ZoneId zoneId = ZoneId.systemDefault();
                LocalDate localDate = instant.atZone(zoneId).toLocalDate();
                preDayList.add(String.valueOf(localDate));
            }
        }
        return preDayList;
    }

    /**
     * @描述: 调用返回格式LocalDate格式 yyyy-mm-dd
     * 时间计算 默认获取从周日开始的本周所有日期
     * @创建时间2020/4/21
     */
    public static List<LocalDate> preDayLocalDateList(String time) {
        List<LocalDate> preDayList = new ArrayList<>();
        for (int i = 0; i < 7; i++) {
            Calendar c = Calendar.getInstance();
            if (StringUtils.isNotEmpty(time)) {
                c.setTime(DateUtil.getDate(time));
            }
            c.set(Calendar.DAY_OF_WEEK, 1);
            c.add(Calendar.DATE, +i);
            Instant instant = c.getTime().toInstant();
            ZoneId zoneId = ZoneId.systemDefault();
            LocalDate localDate = instant.atZone(zoneId).toLocalDate();
            preDayList.add(localDate);
        }
        return preDayList;
    }


    /**
     * 得到本周周(*)
     *
     * @return yyyy-MM-dd
     */
    public static LocalDate getDayOfThisWeekByNum(int num) {
        Calendar c = Calendar.getInstance();
        int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (day_of_week == 0) {
            day_of_week = 7;
        }
        c.add(Calendar.DATE, -day_of_week + num);
        Instant instant = c.getTime().toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        return instant.atZone(zoneId).toLocalDate();
    }


    /**
     * @描述: 获取本周时间段范围
     * @创建时间2020/4/21
     */
    public static String reportDate(String time) {
        Calendar c = Calendar.getInstance();
        Calendar c1 = Calendar.getInstance();
        if (StringUtils.isNotEmpty(time)) {
            c.setTime(DateUtil.getDate(time));
            c1.setTime(DateUtil.getDate(time));
        }
        c.set(Calendar.DAY_OF_WEEK, 1);
        c.add(Calendar.DATE, +6);
        c1.set(Calendar.DAY_OF_WEEK, 1);
        c1.add(Calendar.DATE, +0);
        SimpleDateFormat mmdd = new SimpleDateFormat(YYYY_MM_DDS);
        String beginSunDay = mmdd.format(c1.getTime());
        String endSaturday = mmdd.format(c.getTime());
        return beginSunDay + "-" + endSaturday;
    }

    /**
     * @描述:yyyy/MM/dd 转"yyyy-MM-dd
     * @创建时间2020/4/26
     */
    public static String StringToString(String time) {
        SimpleDateFormat sdfx = new SimpleDateFormat("yyyy/MM/dd");
        SimpleDateFormat sdfh = new SimpleDateFormat("yyyy-MM-dd");
        String nowTime2 = "";
        try {
            nowTime2 = sdfh.format(sdfx.parse(time));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return nowTime2;
    }

    /**
     * @描述:获取本年度所有周六周日时间
     * @创建时间2020/4/27
     */
    public static List<LocalDate> getHolidays(Integer year) {
        if (year == null) {
            year = LocalDate.now().getYear();
        }
        List<LocalDate> localDates = new ArrayList<>();
        Calendar calendar = new GregorianCalendar(year, 0, 1);
        int i = 1;
        while (calendar.get(Calendar.YEAR) < year + 1) {
            calendar.set(Calendar.WEEK_OF_YEAR, i++);
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
            if (calendar.get(Calendar.YEAR) == year) {
                Instant instant = calendar.getTime().toInstant();
                ZoneId zoneId = ZoneId.systemDefault();
                localDates.add(instant.atZone(zoneId).toLocalDate());
            }
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
            if (calendar.get(Calendar.YEAR) == year) {
                Instant instant = calendar.getTime().toInstant();
                ZoneId zoneId = ZoneId.systemDefault();
                localDates.add(instant.atZone(zoneId).toLocalDate());
            }
        }
        return localDates;
    }

    /**
     * @描述:根据年月日取出当前月从 第一周 - 最后一周的所有时间(从本月第一个周周日开始)
     * @创建时间2020/4/28
     */
    public static List<LocalDate> getLocalDateByYearMonth(String time) {
        // Java8  LocalDate
        LocalDate date = LocalDate.parse(time);
        List<LocalDate> list = new ArrayList<>();
        // 该月最后一天
        LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
        // 该月的第一个周日
        LocalDate start = date.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));
        LocalDate beginFisrtDate=LocalDate.of(date.getYear(),date.getMonth(),1);
        if(!start.equals(beginFisrtDate)){
            for (int i=7;i>0;i--){
                list.add(start.plusDays(-i));
                System.out.println(start.plusDays(-i));
            }
        }
        // 根据year年的第week周,查询本周的起止时间
        Calendar calendar = Calendar.getInstance();
        WeekFields weekFields = WeekFields.SUNDAY_START;
        int week=lastDay.get(weekFields.weekOfWeekBasedYear());
        // ①.设置该年份的开始日期:第一个月的第一天
        calendar.set(lastDay.getYear(), 0, 1);
        // ②.计算出第一周还剩几天:+1是因为1号是1天
        int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 1;
        // ③.周数减去第一周再减去要得到的周
        week = week - 2;
        // ④.计算起止日期
        calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
        calendar.add(Calendar.DAY_OF_YEAR, 6);
        Date date1=calendar.getTime();
        lastDay=date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        while (start.isBefore(lastDay)) {
            start = start.plusWeeks(1);
        }
        LocalDate end = start;
        LocalDate begin = date.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));
        for (int i = 0; i < 40; i++) {
            if (begin.isBefore(end.plusDays(-1))) {
                if (i == 0) {
                    list.add(begin.plusDays(0));
                    begin = begin.plusDays(0);
                } else {
                    list.add(begin.plusDays(1));
                    begin = begin.plusDays(1);
                }
            } else {
                break;
            }

        }
        return list;
    }

    /**
     * @描述:根据年度和周计算 当前周所在时间段
     * @创建时间2020/4/28
     */
    public static String getLocalDateByWeek(int year, int week) {
        // 根据year年的第week周,查询本周的起止时间
        SimpleDateFormat mmdd = new SimpleDateFormat(YYYY_MM_DDS);
        Calendar calendar = Calendar.getInstance();
        // ①.设置该年份的开始日期:第一个月的第一天
        calendar.set(year, 0, 1);
        // ②.计算出第一周还剩几天:+1是因为1号是1天
        int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 1;
        // ③.周数减去第一周再减去要得到的周
        week = week - 2;
        // ④.计算起止日期
        calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
        String beginSunDay = mmdd.format(calendar.getTime());
        calendar.add(Calendar.DAY_OF_YEAR, 6);
        String endSaturday = mmdd.format(calendar.getTime());
        return beginSunDay + "-" + endSaturday;
    }
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客星辰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值