import org.springframework.util.ObjectUtils;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Description: 时间工具类
*/
public class DateUtils {
public final static String dateFormatStr = "yyyy-MM-dd";
public final static String timeFormatStr = "yyyy-MM-dd HH:mm:ss";
public final static String nowtimeStr = "yyyyMMddHHmmss";
public final static String dateFormat1Str = "yyyyMMdd";
/**
* 格式化日期
*
* @param date
* @return
*/
public static String fomatDate(Date date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormatStr);
try {
return simpleDateFormat.format(date);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 格式化日期
*
* @param date
* @return
*/
public static String fomatDate(Date date, String pattern) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
return simpleDateFormat.format(date);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 格式化日期
*
* @param date
* @return
*/
public static String fomatDate(LocalDateTime date, String pattern) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
return simpleDateFormat.format(asDate(date));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 格式化日期
*
* @param date
* @return
*/
public static String fomatDate(LocalDate date, String pattern) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
return simpleDateFormat.format(asDate(date));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取月份第一天起始时间
*
* @return
*/
public static LocalDateTime cleanDate(Date date) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
//将分钟至0
calendar.set(Calendar.MINUTE, 0);
//将秒至0
calendar.set(Calendar.SECOND, 0);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 0);
LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
return ldt;
}
/**
* 指定时间年份第一天
*
* @return
*/
public static LocalDateTime getFirstDayDateOfYear(final LocalDateTime date) {
return getFirstDayDateOfYear(asDate(date));
}
/**
* 指定时间年份第一天
*
* @param date
* @return
*/
public static LocalDateTime getFirstDayDateOfYear(final Date date) {
final Calendar cal = Calendar.getInstance();
cal.setTime(date);
final int last = cal.getActualMinimum(Calendar.DAY_OF_YEAR);
cal.set(Calendar.DAY_OF_YEAR, last);
return asLocalDateTime(cal.getTime());
}
/**
* 指定时间年份最后一天
*
* @param date
* @return
*/
public static LocalDateTime getLastDayOfYear(final Date date) {
final Calendar cal = Calendar.getInstance();
cal.setTime(date);
final int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
cal.set(Calendar.DAY_OF_YEAR, last);
return asLocalDateTime(cal.getTime());
}
/**
* 获取当年的开始时间戳
*
* @param timeStamp 毫秒级时间戳
* @param timeZone 如 GMT+8:00
* @return
*/
public static Long getYearStartTime(Long timeStamp, String timeZone) {
Calendar calendar = Calendar.getInstance();// 获取当前日期
calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
calendar.setTimeInMillis(timeStamp);
calendar.add(Calendar.YEAR, 0);
calendar.add(Calendar.DATE, 0);
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_YEAR, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
/**
* 获取当年的最后时间戳
*
* @param timeStamp 毫秒级时间戳
* @param timeZone 如 GMT+8:00
* @return
*/
public static Long getYearEndTime(Long timeStamp, String timeZone) {
Calendar calendar = Calendar.getInstance();// 获取当前日期
calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
calendar.setTimeInMillis(timeStamp);
int year = calendar.get(Calendar.YEAR);
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
calendar.roll(Calendar.DAY_OF_YEAR, -1);
return calendar.getTimeInMillis();
}
/**
* 时间戳转字符串
*
* @param timestamp 毫秒级时间戳
* @param zoneId 如 GMT+8或UTC+08:00
* @return
*/
public static String timestampToStr(long timestamp, String zoneId) {
ZoneId timezone = ZoneId.of(zoneId);
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), timezone);
return localDateTime.toString();
}
/**
* 获取月份第一天起始时间
*
* @return
*/
public static LocalDateTime firstDayOfMonth(Date date) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
//将分钟至0
calendar.set(Calendar.MINUTE, 0);
//将秒至0
calendar.set(Calendar.SECOND, 0);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 0);
LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
return ldt;
}
/**
* 判断两个日期是否是同一个月
*
* @param date1
* @param date2
* @return
*/
public static Boolean sameMonth(LocalDate date1, LocalDate date2) {
if (ObjectUtils.isEmpty(date1) || ObjectUtils.isEmpty(date2)) {
return Boolean.FALSE;
}
if (date1.getYear() != date2.getYear()) {
return Boolean.FALSE;
}
return date1.getMonthValue() == date2.getMonthValue();
}
/**
* 本周周一
*
* @param date
* @return
*/
public static LocalDate mondayOfWeek(LocalDate date) {
return date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
}
/**
* 本周周日
*
* @param date
* @return
*/
public static LocalDate sundayOfWeek(LocalDate date) {
return date.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
}
public static void main(String[] args) {
System.out.println(DateUtils.fomatDate(getFirstDayDateOfYear(LocalDateTime.now()), dateFormat1Str));
}
/**
* 上周周一
*
* @param date
* @return
*/
public static LocalDate mondayOfLastWeek(LocalDate date) {
LocalDate todayOfLastWeek = date.minusDays(7);
return todayOfLastWeek.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)).plusDays(1);
}
/**
* 上周周日
*
* @param date
* @return
*/
public static LocalDate sundayOfLastWeek(LocalDate date) {
LocalDate todayOfLastWeek = date.minusDays(7);
return todayOfLastWeek.with(TemporalAdjusters.next(DayOfWeek.MONDAY)).minusDays(1);
}
/**
* 获取月份最后一天结束时间
*
* @return
*/
public static LocalDateTime lastDayOfMonth(Date date) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 23);
//将分钟至0
calendar.set(Calendar.MINUTE, 59);
//将秒至0
calendar.set(Calendar.SECOND, 59);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 999);
LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
return ldt;
}
}
/**
* 获取月份第一天此刻的时间
*
* @return
*/
public static Date addMonth(Date date, int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(2, amount);
return c.getTime();
}
}
/**
* 月份添加
*
* @param date
* @param amount
* @return
*/
public static LocalDate addMonth(LocalDate date, int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
Calendar c = Calendar.getInstance();
c.setTime(asDate(date));
c.add(2, amount);
return asLocalDate(c.getTime());
}
}
/**
* 获取月份第一天此刻的时间
*
* @return
*/
public static Date addDays(Date date, int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, amount);
return c.getTime();
}
public static LocalDateTime addDays(LocalDateTime date, int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
Calendar c = Calendar.getInstance();
c.setTime(asDate(date));
c.add(Calendar.DATE, amount);
return asLocalDateTime(c.getTime());
}
/***
* 添加日期
*
* @param date
* @param amount
* @return
*/
public static LocalDate addDays(LocalDate date, int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
Calendar c = Calendar.getInstance();
c.setTime(asDate(date));
c.add(Calendar.DATE, amount);
return asLocalDate(c.getTime());
}
/**
* 转date
*
* @param localDateTime
* @return
*/
public static Date asDate(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* 转date
*
* @param localDate
* @return
*/
public static Date asDate(LocalDate localDate) {
if (null == localDate) {
return null;
}
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
return Date.from(zonedDateTime.toInstant());
}
/**
* 转LocalDateTime
*
* @param date
* @return
*/
public static LocalDateTime asLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
/**
* 转LocalDateTime
*
* @param date
* @return
*/
public static LocalDate asLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* 转LocalDateTime
*
* @param localDateTime
* @return
*/
public static LocalDate asLocalDates(LocalDateTime localDateTime) {
Date date = asDate(localDateTime);
return asLocalDate(date);
}
/**
* YYYY-MM-DD转日期
*
* @param date
* @return
*/
public static LocalDate asLocalDate(String date) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateFormatStr);
return LocalDate.parse(date, fmt);
}
/**
* YYYYMMDD转日期
*
* @param date
* @return
*/
public static LocalDate asLocalDates(String date) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateFormat1Str);
return LocalDate.parse(date, fmt);
}
/**
* 格式化
*
* @param date
* @return
*/
public static LocalDateTime asLocalDateTime(String date) {
if (date.trim().length() <= 10) {//只有年月日不包含时分秒
date = date + " 00:00:00";
}
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(timeFormatStr);
return LocalDateTime.parse(date, fmt);
}
public static String dateStart(String date) {
LocalDate dateTmp = asLocalDate(date);
return fomatDate(asDate(dateTmp), timeFormatStr);
}
/**
* 开始时间
*
* @param date
* @return
*/
public static String dateStart(LocalDate date) {
return fomatDate(asDate(date), timeFormatStr);
}
public static String dateStart(LocalDateTime date) {
return fomatDate(asDate(date), timeFormatStr);
}
public static String dateEnd(String date) {
String format = "^\\d{4}(\\-)\\d{1,2}\\1\\d{1,2}$";
Pattern pattern = Pattern.compile(format);
Matcher matcher = pattern.matcher(date);
LocalDate dateTmp;
if (matcher.matches()) {//不包含时分秒
dateTmp = asLocalDate(date);
} else {
dateTmp = asLocalDateTime(date).toLocalDate();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(asDate(dateTmp));
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 23);
//将分钟至0
calendar.set(Calendar.MINUTE, 59);
//将秒至0
calendar.set(Calendar.SECOND, 59);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 999);
LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
return fomatDate(asDate(ldt), timeFormatStr);
}
/**
* 结束时间
*
* @param date
* @return
*/
public static String dateEnd(LocalDate date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(asDate(date));
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 23);
//将分钟至0
calendar.set(Calendar.MINUTE, 59);
//将秒至0
calendar.set(Calendar.SECOND, 59);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 999);
LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
return fomatDate(asDate(ldt), timeFormatStr);
}
/**
* 结束时间
*
* @param date
* @return
*/
public static String dateEnd(LocalDateTime date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(asDate(date));
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 23);
//将分钟至0
calendar.set(Calendar.MINUTE, 59);
//将秒至0
calendar.set(Calendar.SECOND, 59);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 999);
LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
return fomatDate(asDate(ldt), timeFormatStr);
}
/**
* 判断时间区间
*
* @param compareTime
* @param beginTime
* @param endTime
* @return
*/
public static Boolean betweenTime(LocalDateTime compareTime, LocalDateTime beginTime, LocalDateTime endTime) {
if (ObjectUtils.isEmpty(beginTime) || ObjectUtils.isEmpty(endTime)) {
return Boolean.FALSE;
}
if (compareTime.isBefore(beginTime)) {
return Boolean.FALSE;
}
if (compareTime.isAfter(endTime)) {
return Boolean.FALSE;
}
return Boolean.TRUE;
}
//获取当天的开始时间
public static java.util.Date getDayBegin() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
//获取当天的结束时间
public static java.util.Date getDayEnd() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}
/**
* 日期差值
*
* @param beginTime
* @param endTime
* @return
*/
public static Long dateDiff(String beginTime, String endTime) {
LocalDate start = asLocalDate(beginTime);
LocalDate end = asLocalDate(endTime);
return Duration.between(start, end).toDays();
}
/**
* 日期差值
*
* @param beginTime
* @param endTime
* @return
*/
public static Long dateDiff(LocalDateTime beginTime, LocalDateTime endTime) {
return Duration.between(beginTime, endTime).toDays();
}
/**
* 秒时间差
*
* @param beginTime
* @param endTime
* @return
*/
public static Long dateSecondDiff(LocalDateTime beginTime, LocalDateTime endTime) {
return Duration.between(beginTime, endTime).toMillis() / 1000;
}
/**
* 日期差值
*
* @param beginTime
* @param endTime
* @return
*/
public static Long dateDiff(LocalDate beginTime, LocalDate endTime) {
return Duration.between(beginTime, endTime).toDays();
}
}
dateUtils工具类整合。
最新推荐文章于 2024-05-10 02:11:19 发布