获取两个时间段中间所有日期,工具类
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; } }