package com.fengdu.gas.common.util;
|
|
import java.sql.Timestamp;
|
import java.time.*;
|
import java.time.format.DateTimeFormatter;
|
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.TemporalAdjusters;
|
import java.util.Date;
|
|
public class LocalDateTimeUtils {
|
/**
|
* 当前时间
|
*
|
* @return
|
*/
|
public static LocalDateTime now() {
|
return LocalDateTime.now();
|
}
|
|
/**
|
* Date 转 LocalDateTime
|
*
|
* @return
|
*/
|
public static LocalDateTime convert(Date date) {
|
return LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
|
}
|
|
/**
|
* LocalDateTime 转 Date
|
*
|
* @return
|
*/
|
public static Date convert(LocalDateTime localDateTime) {
|
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
}
|
/**
|
* 当前小时开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime hourStartTime() {
|
// 获取当前时间
|
LocalDateTime now = LocalDateTime.now();
|
|
// 获取当前小时的开始时间
|
return now.withMinute(0).withSecond(0).withNano(0);
|
}
|
|
/**
|
* 当前小时结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime hourEndTime() {
|
LocalDateTime now = LocalDateTime.now();
|
return now.withMinute(59).withSecond(59).withNano(999999999); // 设置为最大毫秒数以确保包括最后一毫秒
|
}
|
/**
|
* 上个小时开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime upHourStartTime() {
|
|
// 获取当前时间
|
LocalDateTime now = LocalDateTime.now();
|
// 获取一个小时前的时间
|
LocalDateTime oneHourAgo = now.minusHours(1);
|
// 获取当前小时的开始时间
|
return oneHourAgo.withMinute(0).withSecond(0).withNano(0);
|
}
|
/**
|
* 上个小时结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime upHourEndTime() {
|
// 获取当前时间
|
LocalDateTime now = LocalDateTime.now();
|
// 获取一个小时前的时间
|
LocalDateTime oneHourAgo = now.minusHours(1);
|
|
// 获取当前小时的开始时间
|
return oneHourAgo.withMinute(59).withSecond(59).withNano(999999999); // 设置为最大毫秒数以确保包括最后一毫秒
|
}
|
/**
|
* 今天开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime todayStartTime() {
|
return LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
|
}
|
|
/**
|
* 今天结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime todayEndTime() {
|
return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
}
|
|
/**
|
* 昨天开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime yesterdayStartTime() {
|
return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.DAYS), LocalTime.MIN);
|
}
|
|
/**
|
* 昨天结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime yesterdayEndTime() {
|
return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.DAYS), LocalTime.MAX);
|
}
|
|
/**
|
* 最近7天开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime last7DaysStartTime() {
|
return LocalDateTime.of(LocalDate.now().minus(6L, ChronoUnit.DAYS), LocalTime.MIN);
|
}
|
|
/**
|
* 最近7天结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime last7DaysEndTime() {
|
return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
}
|
|
/**
|
* 最近30天开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime last30DaysStartTime() {
|
return LocalDateTime.of(LocalDate.now().minus(29L, ChronoUnit.DAYS), LocalTime.MIN);
|
}
|
|
/**
|
* 最近30天结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime last30DaysEndTime() {
|
return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
}
|
|
/**
|
* 最近一年开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime last1YearStartTime() {
|
return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.YEARS).plus(1L, ChronoUnit.DAYS), LocalTime.MIN);
|
}
|
|
/**
|
* 最近一年结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime last1YearEndTime() {
|
return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
|
}
|
/**
|
* 本周开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime weekStartTime() {
|
LocalDate now = LocalDate.now();
|
return LocalDateTime.of(now.minusDays(now.getDayOfWeek().getValue() - 1), LocalTime.MIN);
|
}
|
|
/**
|
* 本周结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime weekEndTime() {
|
LocalDate now = LocalDate.now();
|
return LocalDateTime.of(now.plusDays(7 - now.getDayOfWeek().getValue()), LocalTime.MAX);
|
}
|
|
/**
|
* 本月开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime monthStartTime() {
|
return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
|
}
|
|
/**
|
* 本月结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime monthEndTime() {
|
return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
|
}
|
|
/**
|
* 本季度开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime quarterStartTime() {
|
LocalDate now = LocalDate.now();
|
Month month = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
return LocalDateTime.of(LocalDate.of(now.getYear(), month, 1), LocalTime.MIN);
|
}
|
|
/**
|
* 本季度结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime quarterEndTime() {
|
LocalDate now = LocalDate.now();
|
Month month = Month.of(now.getMonth().firstMonthOfQuarter().getValue()).plus(2L);
|
return LocalDateTime.of(LocalDate.of(now.getYear(), month, month.length(now.isLeapYear())), LocalTime.MAX);
|
}
|
|
/**
|
* 本半年开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime halfYearStartTime() {
|
LocalDate now = LocalDate.now();
|
Month month = (now.getMonthValue() > 6) ? Month.JULY : Month.JANUARY;
|
return LocalDateTime.of(LocalDate.of(now.getYear(), month, 1), LocalTime.MIN);
|
}
|
|
/**
|
* 本半年结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime halfYearEndTime() {
|
LocalDate now = LocalDate.now();
|
Month month = (now.getMonthValue() > 6) ? Month.DECEMBER : Month.JUNE;
|
return LocalDateTime.of(LocalDate.of(now.getYear(), month, month.length(now.isLeapYear())), LocalTime.MAX);
|
}
|
|
/**
|
* 本年开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime yearStartTime() {
|
return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
|
}
|
|
/**
|
* 本年结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime yearEndTime() {
|
return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
|
}
|
|
/**
|
* 上周开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastWeekStartTime() {
|
LocalDate lastWeek = LocalDate.now().minus(1L, ChronoUnit.WEEKS);
|
return LocalDateTime.of(lastWeek.minusDays(lastWeek.getDayOfWeek().getValue() - 1), LocalTime.MIN);
|
}
|
|
/**
|
* 上周结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastWeekEndTime() {
|
LocalDate lastWeek = LocalDate.now().minus(1L, ChronoUnit.WEEKS);
|
return LocalDateTime.of(lastWeek.plusDays(7 - lastWeek.getDayOfWeek().getValue()), LocalTime.MAX);
|
}
|
|
/**
|
* 上月开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastMonthStartTime() {
|
return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
|
}
|
|
/**
|
* 上月结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastMonthEndTime() {
|
return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
|
}
|
|
/**
|
* 上季度开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastQuarterStartTime() {
|
LocalDate now = LocalDate.now();
|
Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
Month firstMonthOfLastQuarter = firstMonthOfQuarter.minus(3L);
|
int yearOfLastQuarter = firstMonthOfQuarter.getValue() < 4 ? now.getYear() - 1 : now.getYear();
|
return LocalDateTime.of(LocalDate.of(yearOfLastQuarter, firstMonthOfLastQuarter, 1), LocalTime.MIN);
|
}
|
|
/**
|
* 上季度结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastQuarterEndTime() {
|
LocalDate now = LocalDate.now();
|
Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
Month firstMonthOfLastQuarter = firstMonthOfQuarter.minus(1L);
|
int yearOfLastQuarter = firstMonthOfQuarter.getValue() < 4 ? now.getYear() - 1 : now.getYear();
|
return LocalDateTime.of(LocalDate.of(yearOfLastQuarter, firstMonthOfLastQuarter, firstMonthOfLastQuarter.maxLength()), LocalTime.MAX);
|
}
|
|
/**
|
* 上半年开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastHalfYearStartTime() {
|
LocalDate now = LocalDate.now();
|
int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() : now.getYear() - 1;
|
Month firstMonthOfLastHalfYear = (now.getMonthValue() > 6) ? Month.JANUARY : Month.JULY;
|
return LocalDateTime.of(LocalDate.of(lastHalfYear, firstMonthOfLastHalfYear, 1), LocalTime.MIN);
|
}
|
|
/**
|
* 上半年结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastHalfYearEndTime() {
|
LocalDate now = LocalDate.now();
|
int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() : now.getYear() - 1;
|
Month lastMonthOfLastHalfYear = (now.getMonthValue() > 6) ? Month.JUNE : Month.DECEMBER;
|
return LocalDateTime.of(LocalDate.of(lastHalfYear, lastMonthOfLastHalfYear, lastMonthOfLastHalfYear.maxLength()), LocalTime.MAX);
|
}
|
|
/**
|
* 上一年开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastYearStartTime() {
|
return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
|
}
|
|
/**
|
* 上一年结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime lastYearEndTime() {
|
return LocalDateTime.of(LocalDate.now().minus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
|
}
|
|
/**
|
* 下周开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextWeekStartTime() {
|
LocalDate nextWeek = LocalDate.now().plus(1L, ChronoUnit.WEEKS);
|
return LocalDateTime.of(nextWeek.minusDays(nextWeek.getDayOfWeek().getValue() - 1), LocalTime.MIN);
|
}
|
|
/**
|
* 下周结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextWeekEndTime() {
|
LocalDate nextWeek = LocalDate.now().plus(1L, ChronoUnit.WEEKS);
|
return LocalDateTime.of(nextWeek.plusDays(7 - nextWeek.getDayOfWeek().getValue()), LocalTime.MAX);
|
}
|
|
/**
|
* 下月开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextMonthStartTime() {
|
return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
|
}
|
|
/**
|
* 下月结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextMonthEndTime() {
|
return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
|
}
|
|
/**
|
* 下季度开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextQuarterStartTime() {
|
LocalDate now = LocalDate.now();
|
Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
Month firstMonthOfNextQuarter = firstMonthOfQuarter.plus(3L);
|
int yearOfNextQuarter = firstMonthOfQuarter.getValue() > 9 ? now.getYear() + 1 : now.getYear();
|
return LocalDateTime.of(LocalDate.of(yearOfNextQuarter, firstMonthOfNextQuarter, 1), LocalTime.MIN);
|
}
|
|
/**
|
* 下季度结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextQuarterEndTime() {
|
LocalDate now = LocalDate.now();
|
Month firstMonthOfQuarter = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
|
Month firstMonthOfNextQuarter = firstMonthOfQuarter.plus(5L);
|
int yearOfNextQuarter = firstMonthOfQuarter.getValue() > 9 ? now.getYear() + 1 : now.getYear();
|
return LocalDateTime.of(LocalDate.of(yearOfNextQuarter, firstMonthOfNextQuarter, firstMonthOfNextQuarter.maxLength()), LocalTime.MAX);
|
}
|
|
/**
|
* 上半年开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextHalfYearStartTime() {
|
LocalDate now = LocalDate.now();
|
int nextHalfYear = (now.getMonthValue() > 6) ? now.getYear() + 1 : now.getYear();
|
Month firstMonthOfNextHalfYear = (now.getMonthValue() > 6) ? Month.JANUARY : Month.JULY;
|
return LocalDateTime.of(LocalDate.of(nextHalfYear, firstMonthOfNextHalfYear, 1), LocalTime.MIN);
|
}
|
|
/**
|
* 上半年结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextHalfYearEndTime() {
|
LocalDate now = LocalDate.now();
|
int lastHalfYear = (now.getMonthValue() > 6) ? now.getYear() + 1 : now.getYear();
|
Month lastMonthOfNextHalfYear = (now.getMonthValue() > 6) ? Month.JUNE : Month.DECEMBER;
|
return LocalDateTime.of(LocalDate.of(lastHalfYear, lastMonthOfNextHalfYear, lastMonthOfNextHalfYear.maxLength()), LocalTime.MAX);
|
}
|
|
/**
|
* 下一年开始时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextYearStartTime() {
|
return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
|
}
|
|
/**
|
* 下一年结束时间
|
*
|
* @return
|
*/
|
public static LocalDateTime nextYearEndTime() {
|
return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
|
}
|
public static Timestamp getDateStartTime(String dateTime, String format) {
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
|
// 解析日期字符串为LocalDate对象
|
LocalDate date = LocalDate.parse(dateTime, formatter);
|
LocalDateTime startOfDay = date.atStartOfDay();
|
return LocalDateTimeUtil.getTimeStamp(startOfDay);
|
}
|
public static Timestamp getDateLastTime(String dateTime, String format) {
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
|
// 解析日期字符串为LocalDate对象
|
LocalDate date = LocalDate.parse(dateTime, formatter);
|
LocalDateTime endOfDay = date.atTime(LocalTime.MAX);
|
return LocalDateTimeUtil.getTimeStamp(endOfDay);
|
}
|
}
|