import org.springframework.stereotype.Component;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Stream;
public class TimeUtils {
/**
* 补充时间
*
* @param start
* @param end
* @return
*/
public static List<String> findDates(String start, String end) {
List<String> timeList = new ArrayList<>();
LocalDate startDate = LocalDate.parse(start);
LocalDate endDate = LocalDate.parse(end);
long distance = ChronoUnit.MONTHS.between(startDate, endDate);
if (distance < 1) {
timeList.add(start.substring(0, start.length() - 3));
return timeList;
}
DateTimeFormatter localDateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM");
Stream.iterate(startDate, d -> d.plusMonths(1)).limit(distance + 1).forEach(f -> timeList.add(localDateTimeFormat.format(f)));
return timeList;
}
/**
* 补充时间(间隔之间的每一天)
*
* @param start
* @param end
* @return
*/
public static List<String> findDatesyMd(String start, String end) {
List<String> timeList = new ArrayList<>();
LocalDate startDate = LocalDate.parse(start);
LocalDate endDate = LocalDate.parse(end);
DateTimeFormatter localDateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
long dex = ChronoUnit.DAYS.between(startDate, endDate);
if (dex > 0) {
Stream.iterate(startDate, d -> d.plusDays(1)).limit(dex + 1).forEach(f -> timeList.add(localDateTimeFormat.format(f)));
}
return timeList;
}
/**
* 获取 当前周 开始时间 和 结束时间
*
* @param today
* @param isFirst true表示查询本季度开始日期 false表示查询本季度结束日期
* @return
*/
public static LocalDate getStartOrEndDayOfWeek(LocalDate today, Boolean isFirst) {
LocalDate resDate = LocalDate.now();
if (today == null) {
today = resDate;
}
DayOfWeek week = today.getDayOfWeek();
int value = week.getValue();
if (isFirst) {
resDate = today.minusDays(value - 1);
} else {
resDate = today.plusDays(7 - value);
}
return resDate;
}
/**
* 获取当 前月 开始时间 和 结束时间
*
* @param today
* @param isFirst true表示查询本季度开始日期 false表示查询本季度结束日期
* @return
*/
public static LocalDate getStartOrEndDayOfMonth(LocalDate today, Boolean isFirst) {
LocalDate resDate = LocalDate.now();
if (today == null) {
today = resDate;
}
if (isFirst) {
resDate = today.withDayOfMonth(1);
} else {
resDate = today.with(TemporalAdjusters.lastDayOfMonth());
}
return resDate;
}
/**
* 获取当前日期所在季度的开始日期和结束日期
* 季度一年四季, 第一季度:1月-3月, 第二季度:4月-6月, 第三季度:7月-9月, 第四季度:10月-12月
*
* @param isFirst true表示查询本季度开始日期 false表示查询本季度结束日期
* @return
*/
public static LocalDate getStartOrEndDayOfQuarter(LocalDate toDay, Boolean isFirst) {
LocalDate resDate = LocalDate.now();
if (toDay == null) {
toDay = resDate;
}
Month month = toDay.getMonth();
Month firstMonthOfQuarter = month.firstMonthOfQuarter();
Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
if (isFirst) {
resDate = LocalDate.of(toDay.getYear(), firstMonthOfQuarter, 1);
} else {
resDate = LocalDate.of(toDay.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(toDay.isLeapYear()));
}
return resDate;
}
/**
* 获取 当前年 开始时间及结束时间
*
* @param today
* @param isFirst true表示查询本季度开始日期 false表示查询本季度结束日期
* @return
*/
public static LocalDate getStartOrEndDayOfYear(LocalDate today, Boolean isFirst) {
LocalDate resDate = LocalDate.now();
if (today == null) {
today = resDate;
}
if (isFirst) {
resDate = LocalDate.of(today.getYear(), Month.JANUARY, 1);
} else {
resDate = LocalDate.of(today.getYear(), Month.DECEMBER, Month.DECEMBER.length(today.isLeapYear()));
}
return resDate;
}
/**
* LocalDate转Instant格式
*
* @param localDate
* @return
*/
public static Instant localDateToInstant(LocalDate localDate) {
return localDate.atStartOfDay().toInstant(ZoneOffset.UTC);
}
/**
* Instant 转 LocalDateTime
*
* @param instant
* @return
*/
public static LocalDateTime instantToLocalDateTime(Instant instant) {
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
}
/**
* date 转 localdatetime
*
* @param date
* @return
*/
public static LocalDateTime dateToLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}
/**
* localdatetime 转 date
*
* @param localDateTime
* @return
*/
public static Date localDateTimeToDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* LocalDate 转 date
*
* @param localDate
* @return
*/
public static Date localDateToDate(LocalDate localDate) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
return Date.from(instant);
}
LocalDate 时间工具类
最新推荐文章于 2023-12-29 15:53:37 发布