获取两个时间段中间所有日期,工具类

package com.jingluu.admin.modules.elasticsearch.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @Author: eros
 * @Description:
 * @Date: Created in 2020/4/15 9:43
 * @Version: 1.0
 * @Modified By:
 */
public class DateTimeUtils {

    public static final SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static final SimpleDateFormat date_sdf = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * 当前日历,这里用中国时间表示
     *
     * @return 以当地时区表示的系统当前日历
     */
    public static Calendar getCalendar() {
        return Calendar.getInstance();
    }

    /**
     * 系统时间的秒数
     *
     * @return 系统时间的秒数
     */
    public static long getSeconds() {
        return Instant.now().getEpochSecond();
    }

    /**
     * 指定毫秒数表示日期的默认显示,具体格式:年-月-日
     *
     * @param millis 指定的毫秒数
     * @return 指定毫秒数表示日期按“年-月-日“格式显示
     */
    public static String formatDate(long millis) {
        return date_sdf.format(new Date(millis));
    }

    /**
     * @Description: 获取两个时间段 之间的所有日期,具体格式:年-月-日
     * @Author: eros
     * @Date: 2020/4/15 10:32
     * @param startDateStr 开始时间 年-月-日 时:分:秒
     * @param endDateStr 结束时间 年-月-日 时:分:秒
     * @Return: java.util.List<java.lang.String>
     * @Exception:
     */
    public static List<String> getDateList(String startDateStr, String endDateStr) throws ParseException {
        List<String> result = new ArrayList<>();
        // 将 str时间转为 Date 类型
        Date startDate = datetimeFormat.parse(startDateStr);
        Date endDate = datetimeFormat.parse(endDateStr);
        // 这里主要借助于Calendar 对于两个时间的比较,来存储
        Calendar startCal = getCalendar();
        startCal.setTime(startDate);
        Calendar endCal = getCalendar();
        endCal.setTime(endDate);
        do {
            result.add(formatDate(startCal.getTimeInMillis()));
            startCal.add(Calendar.DAY_OF_YEAR, 1);
        } while (startCal.before(endCal));
        // 因为精细度到 日期,所有最后一个日期难以处理,需要单独来做
        String end = formatDate(endCal.getTimeInMillis());
        if(!result.contains(end)) {
            result.add(end);
        }
        return result;
    }

}

 

posted @ 2020-04-15 10:38  eros_token  阅读(787)  评论(0编辑  收藏  举报