package com.gabriel.stage.utils; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import org.apache.commons.lang3.time.DateUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalUnit; import java.util.Date; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * @author: Gabriel * @date: 2019/12/3 22:49 * @description 日期时间转换工具类 */ public class CommonDateUtil { public static final String FORMATTER_YYYY_M_MDD_H_HMMSS = "yyyy-MM-dd HH:mm:ss"; public static final String FORMATTER_YYYY_M_MDD_H_HMM = "yyyy-MM-dd HH:mm"; public static final String FORMATTER_YYYY_M_MDD = "yyyy-MM-dd"; /** * 根据起止时间构建一个时间列表 Date->List<Date> * @param begin 开始时间 {@link java.util.Date} * @param end 结束时间 {@link java.util.Date} * @return */ public static List<Date> collectDateByDates(Date begin,Date end){ return Stream.iterate(begin,date -> DateUtils.addDays(date,1)) .limit(DateUtil.between(begin,end,DateUnit.DAY)) .collect(Collectors.toList()); } /** * 根据起止时间构建一个时间字符串列表 Date->List<String> * @param begin 开始时间 {@link java.util.Date} * @param end 结束时间 {@link java.util.Date} * @return */ public static List<String> collectStrDateByDates(Date begin,Date end){ return Stream.iterate(begin,date -> DateUtils.addDays(date,1)) .limit(DateUtil.between(begin,end,DateUnit.DAY)) .map(date -> DateUtil.format(date,CommonDateUtil.FORMATTER_YYYY_M_MDD)) .collect(Collectors.toList()); } /** * 根据起止时间构建一个时间字符串列表 LocalDate ->List<Date> * @param begin 开始时间 {@link java.util.Date} * @param end 结束时间 {@link java.util.Date} * @return */ public static List<Date> collectDateByLocalDates(LocalDate begin, LocalDate end){ return Stream.iterate(begin, localDate -> localDate.plusDays(1)) .limit(ChronoUnit.DAYS.between(begin, end) + 1) .map(x->Date.from(x.atStartOfDay(ZoneId.systemDefault()).toInstant())) .collect(Collectors.toList()); } /** * 根据起止时间构建一个时间字符串列表 LocalDate ->List<String> * @param begin 开始时间 {@link java.time.LocalDate} * @param end 结束时间 {@link java.time.LocalDate} * @return */ public static List<String> collectStrDateByLocalDates(LocalDate begin, LocalDate end){ return Stream.iterate(begin, localDate -> localDate.plusDays(1)) .limit(ChronoUnit.DAYS.between(begin, end) + 1) .map(LocalDate::toString) .collect(Collectors.toList()); } }