package com.qianwen.smartman.common.utils;
|
|
import java.text.DateFormat;
|
import java.text.SimpleDateFormat;
|
import java.time.DayOfWeek;
|
import java.time.Instant;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.LocalTime;
|
import java.time.Period;
|
import java.time.ZoneId;
|
import java.time.ZonedDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.TemporalAccessor;
|
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.TemporalUnit;
|
import java.time.temporal.WeekFields;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
import com.qianwen.smartman.common.constant.DateConstant;
|
import com.qianwen.core.tool.utils.DateUtil;
|
import com.qianwen.smartman.modules.mdc.dto.IntervalDateDto;
|
|
public class LocalDateTimeUtils {
|
public static String NORMAL_PATTERN = DateConstant.PATTERN_DATE_TIME;
|
|
public static Long getSecondsByTime(LocalDateTime time) {
|
return Long.valueOf(time.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond());
|
}
|
|
public static String formatTime(LocalDateTime time, String pattern) {
|
return time.format(DateTimeFormatter.ofPattern(pattern));
|
}
|
|
public static String formatTimeLocalDate(LocalDate date, String pattern) {
|
return date.format(DateTimeFormatter.ofPattern(pattern));
|
}
|
|
public static String formatNow(String pattern) {
|
return formatTime(LocalDateTime.now(), pattern);
|
}
|
|
public static LocalDateTime plus(LocalDate localDate, long number, TemporalUnit field) {
|
return localDate.atStartOfDay().plus(number, field);
|
}
|
|
public static Integer getWeek(LocalDate time) {
|
WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 1);
|
return Integer.valueOf(time.get(weekFields.weekOfYear()));
|
}
|
|
public static Integer getMonth(LocalDate time) {
|
return Integer.valueOf(time.getMonth().getValue());
|
}
|
|
public static Integer getYear(LocalDate time) {
|
return Integer.valueOf(time.getYear());
|
}
|
|
public static long betweenTwoTime(LocalDateTime startTime, LocalDateTime endTime, ChronoUnit field) {
|
Period period = Period.between(LocalDate.from((TemporalAccessor) startTime), LocalDate.from((TemporalAccessor) endTime));
|
if (field == ChronoUnit.YEARS) {
|
return period.getYears();
|
}
|
if (field == ChronoUnit.MONTHS) {
|
return (period.getYears() * 12) + period.getMonths();
|
}
|
return field.between(startTime, endTime);
|
}
|
|
public static LocalDateTime getDayStart(LocalDateTime time) {
|
return time.withHour(0).withMinute(0).withSecond(0).withNano(0);
|
}
|
|
public static LocalDateTime getDayEnd(LocalDateTime time) {
|
return time.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
|
}
|
|
/**
|
* 计算一年的天数
|
* @param year 年份
|
* @return year指定的年份总天数
|
*/
|
public static Integer getDayOfYear(Integer year) {
|
return Integer.valueOf(LocalDate.of(year, 1, 1).isLeapYear() ? 366 : 365);
|
}
|
|
/**
|
* 计算2个日期天数的差 endDate-startDate
|
* @param startDate
|
* @param endDate
|
* @return
|
*/
|
public static Integer getDifference(LocalDate startDate, LocalDate endDate) {
|
Long l = Long.valueOf(endDate.toEpochDay() - startDate.toEpochDay());//l.intValue()
|
Integer difference = Integer.valueOf(Integer.parseInt(l.toString()));
|
return difference;
|
}
|
|
public static LocalDate getLastDayOfYear(LocalDate date) {
|
LocalDate lastDayOfYear = date.with(TemporalAdjusters.lastDayOfYear());
|
return lastDayOfYear;
|
}
|
|
public static Date LocalDateTimeToDate(LocalDateTime localDateTime) {
|
ZoneId zoneId = ZoneId.systemDefault();
|
ZonedDateTime zdt = localDateTime.atZone(zoneId);
|
Date date = Date.from(zdt.toInstant());
|
return date;
|
}
|
|
public static Date LocalDateToDate(LocalDate localDate) {
|
ZoneId zone = ZoneId.systemDefault();
|
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
|
Date date = Date.from(instant);
|
return date;
|
}
|
|
public static Date LocalTimeToDate(LocalTime localTime) {
|
LocalDate localDate = LocalDate.now();
|
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
|
ZoneId zone = ZoneId.systemDefault();
|
Instant instant = localDateTime.atZone(zone).toInstant();
|
Date date = Date.from(instant);
|
return date;
|
}
|
|
public static LocalDateTime DateToLocalDateTime(Date date) {
|
Instant instant = date.toInstant();
|
ZoneId zone = ZoneId.systemDefault();
|
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
|
return localDateTime;
|
}
|
|
public static LocalDate dateToLocalDate(Date date) {
|
Instant instant = date.toInstant();
|
ZoneId zone = ZoneId.systemDefault();
|
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
|
LocalDate localDate = localDateTime.toLocalDate();
|
return localDate;
|
}
|
|
public static LocalTime DateToLocalTime(Date date) {
|
Instant instant = date.toInstant();
|
ZoneId zone = ZoneId.systemDefault();
|
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
|
LocalTime localTime = localDateTime.toLocalTime();
|
return localTime;
|
}
|
|
public static List<IntervalDateDto> getIntervalDate(LocalDate startDate, LocalDate endDate) {
|
List<IntervalDateDto> intervalDateDtoList = new ArrayList<>();
|
int startYear = startDate.getYear();
|
int endYear = endDate.getYear();
|
for (int i = startYear; i <= endYear; i++) {
|
IntervalDateDto intervalDateDto = new IntervalDateDto();
|
intervalDateDto.setYear(Integer.valueOf(i));
|
List<Integer> weekList = new ArrayList<>();
|
List<Integer> monthList = new ArrayList<>();
|
List<String> dayList = new ArrayList<>();
|
Integer startWeek = getWeek(startDate);
|
Integer endWeek = getWeek(endDate);
|
if (startYear == endYear) {
|
int startMonth = startDate.getMonth().getValue();
|
int endMonth = endDate.getMonth().getValue();
|
for (int n = startMonth; n <= endMonth; n++) {
|
monthList.add(Integer.valueOf(n));
|
}
|
for (int m = startWeek.intValue(); m <= endWeek.intValue(); m++) {
|
weekList.add(Integer.valueOf(m));
|
}
|
} else if (i == startYear) {
|
for (int j = startDate.getMonthValue(); j <= 12; j++) {
|
monthList.add(Integer.valueOf(j));
|
}
|
for (int j2 = startWeek.intValue(); j2 <= 53; j2++) {
|
weekList.add(Integer.valueOf(j2));
|
}
|
} else if (i == endYear) {
|
for (int j3 = 1; j3 <= endDate.getMonthValue(); j3++) {
|
monthList.add(Integer.valueOf(j3));
|
}
|
for (int j4 = 1; j4 <= endWeek.intValue(); j4++) {
|
weekList.add(Integer.valueOf(j4));
|
}
|
} else {
|
for (int l = 1; l <= 12; l++) {
|
monthList.add(Integer.valueOf(l));
|
}
|
for (int k = 1; k <= 53; k++) {
|
weekList.add(Integer.valueOf(k));
|
}
|
}
|
DateFormat dateFormat = new SimpleDateFormat(DateConstant.PATTERN_DATE);
|
Calendar tempStart = Calendar.getInstance();
|
tempStart.setTime(DateUtil.toDate(startDate));
|
Calendar tempEnd = Calendar.getInstance();
|
tempEnd.setTime(DateUtil.toDate(endDate));
|
tempEnd.add(5, 1);
|
while (tempStart.before(tempEnd)) {
|
dayList.add(dateFormat.format(tempStart.getTime()));
|
tempStart.add(6, 1);
|
}
|
intervalDateDto.setMonthList(monthList);
|
intervalDateDto.setWeekList(weekList);
|
intervalDateDto.setDayList(dayList);
|
intervalDateDtoList.add(intervalDateDto);
|
}
|
return intervalDateDtoList;
|
}
|
|
public static List<IntervalDateDto> getIntervalDateReverse(LocalDate startDate, LocalDate endDate) {
|
List<IntervalDateDto> intervalDateDtoList = new ArrayList<>();
|
int startYear = startDate.getYear();
|
int endYear = endDate.getYear();
|
for (int i = endYear; i >= startYear; i--) {
|
IntervalDateDto intervalDateDto = new IntervalDateDto();
|
intervalDateDto.setYear(Integer.valueOf(i));
|
List<Integer> weekList = new ArrayList<>();
|
List<Integer> monthList = new ArrayList<>();
|
List<String> dayList = new ArrayList<>();
|
Integer startWeek = getWeek(startDate);
|
Integer endWeek = getWeek(endDate);
|
if (startYear == endYear) {
|
int startMonth = startDate.getMonth().getValue();
|
int endMonth = endDate.getMonth().getValue();
|
for (int n = endMonth; n >= startMonth; n--) {
|
monthList.add(Integer.valueOf(n));
|
}
|
for (int m = endWeek.intValue(); m >= startWeek.intValue(); m--) {
|
weekList.add(Integer.valueOf(m));
|
}
|
} else if (i == startYear) {
|
for (int j = 12; j >= startDate.getMonthValue(); j--) {
|
monthList.add(Integer.valueOf(j));
|
}
|
for (int j2 = 53; j2 >= startWeek.intValue(); j2--) {
|
weekList.add(Integer.valueOf(j2));
|
}
|
} else if (i == endYear) {
|
for (int j3 = endDate.getMonthValue(); j3 >= 1; j3--) {
|
monthList.add(Integer.valueOf(j3));
|
}
|
for (int j4 = endWeek.intValue(); j4 >= 1; j4--) {
|
weekList.add(Integer.valueOf(j4));
|
}
|
} else {
|
for (int l = 12; l >= 1; l--) {
|
monthList.add(Integer.valueOf(l));
|
}
|
for (int k = 53; k >= 1; k--) {
|
weekList.add(Integer.valueOf(k));
|
}
|
}
|
DateFormat dateFormat = new SimpleDateFormat(DateConstant.PATTERN_DATE);
|
Calendar tempStart = Calendar.getInstance();
|
tempStart.setTime(DateUtil.toDate(startDate));
|
Calendar tempEnd = Calendar.getInstance();
|
tempEnd.setTime(DateUtil.toDate(endDate));
|
tempStart.add(5, -1);
|
while (tempEnd.after(tempStart)) {
|
dayList.add(dateFormat.format(tempEnd.getTime()));
|
tempEnd.add(6, -1);
|
}
|
intervalDateDto.setMonthList(monthList);
|
intervalDateDto.setWeekList(weekList);
|
intervalDateDto.setDayList(dayList);
|
intervalDateDtoList.add(intervalDateDto);
|
}
|
return intervalDateDtoList;
|
}
|
|
public static Date getFirstDayDateOfYear(Date date) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
int last = cal.getActualMinimum(6);
|
cal.set(6, last);
|
return cal.getTime();
|
}
|
|
public static Date getLastDayOfYear(Date date) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
int last = cal.getActualMaximum(6);
|
cal.set(6, last);
|
return cal.getTime();
|
}
|
|
public static LocalDateTime stringToLocalDateTime(String date) {
|
return LocalDateTime.parse(date, DateTimeFormatter.ofPattern(NORMAL_PATTERN));
|
}
|
|
public static List<LocalDate> getDateList(LocalDate startDate, LocalDate endDate) {
|
List<LocalDate> localDateList = new ArrayList<>();
|
Integer length = getDifference(startDate, endDate);
|
for (int i = length.intValue(); i >= 0; i--) {
|
localDateList.add(endDate.minusDays(i));
|
}
|
return localDateList;
|
}
|
}
|