时间工具类DateUtils
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
public class DateUtils {
private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);
private static final String PATTERN_YMD = "yyyy-MM-dd";
private static final String PATTERN_YMD_HMS = "yyyy-MM-dd HH:mm:ss";
public static String parseDate(Date date, String pattern) {
if (date == null) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}
public static String parseDate(Date date) {
if (date == null) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat(PATTERN_YMD);
return format.format(date);
}
public static String parseDate(Date date, Integer type) {
if (date == null) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat(PATTERN_YMD_HMS);
return format.format(date);
}
public static Date stringToDate(String date) {
SimpleDateFormat format = new SimpleDateFormat(PATTERN_YMD);
try {
return format.parse(date);
} catch (Exception e) {
logger.error("日期解析异常,参数: {}", date);
}
return null;
}
public static Date stringToDate(String date, Integer type) {
SimpleDateFormat format = new SimpleDateFormat(PATTERN_YMD_HMS);
try {
return format.parse(date);
} catch (Exception e) {
logger.error("日期解析异常,参数: {}", date);
}
return null;
}
public static long calculateDays(String startTime, String endTime) {
DateTimeFormatter formatterLocalTime = DateTimeFormatter.ofPattern(PATTERN_YMD);
LocalDate localStartDate = LocalDate.parse(startTime, formatterLocalTime);
LocalDate localEndDate = LocalDate.parse(endTime, formatterLocalTime);
return Math.abs(localStartDate.until(localEndDate, ChronoUnit.DAYS));
}
public static long calculateDays(String startTime, String endTime,Integer type) {
DateTimeFormatter formatterLocalTime = DateTimeFormatter.ofPattern(PATTERN_YMD_HMS);
LocalDate localStartDate = LocalDate.parse(startTime, formatterLocalTime);
LocalDate localEndDate = LocalDate.parse(endTime, formatterLocalTime);
return Math.abs(localStartDate.until(localEndDate, ChronoUnit.DAYS));
}
public static String getStartDate(String inputDateString) {
LocalDate localDate = LocalDate.parse(inputDateString, DateTimeFormatter.ofPattern(PATTERN_YMD_HMS));
LocalDateTime localDateTime = localDate.atStartOfDay();
return localDateTime.format(DateTimeFormatter.ofPattern(PATTERN_YMD_HMS));
}
public static String getEndDate(String inputDateString) {
LocalDate localDate = LocalDate.parse(inputDateString, DateTimeFormatter.ofPattern(PATTERN_YMD_HMS));
LocalDateTime localDateTime = localDate.atTime(LocalTime.MAX);
return localDateTime.format(DateTimeFormatter.ofPattern(PATTERN_YMD_HMS));
}
public static Date getStartDate(Date time) {
if (time == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
public static Date getEndDate(Date time) {
if (time == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
public static Date getStartOfMonth(Date time) {
if (time == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.DAY_OF_MONTH, 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.getTime();
}
public static Date getEndOfMonth(Date time) {
if (time == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
public static long calculateYears(String startTime, String endTime) {
DateTimeFormatter formatterLocalTime = DateTimeFormatter.ofPattern(PATTERN_YMD);
LocalDate localStartDate = LocalDate.parse(startTime, formatterLocalTime);
LocalDate localEndDate = LocalDate.parse(endTime, formatterLocalTime);
return Math.abs(localStartDate.until(localEndDate, ChronoUnit.YEARS));
}
public static long calculateYears(String startTime, String endTime,Integer type) {
DateTimeFormatter formatterLocalTime = DateTimeFormatter.ofPattern(PATTERN_YMD_HMS);
LocalDate localStartDate = LocalDate.parse(startTime, formatterLocalTime);
LocalDate localEndDate = LocalDate.parse(endTime, formatterLocalTime);
return Math.abs(localStartDate.until(localEndDate, ChronoUnit.YEARS));
}
public static long calculateMonths(String startTime, String endTime) {
DateTimeFormatter formatterLocalTime = DateTimeFormatter.ofPattern(PATTERN_YMD);
LocalDate localStartDate = LocalDate.parse(startTime, formatterLocalTime);
LocalDate localEndDate = LocalDate.parse(endTime, formatterLocalTime);
return Math.abs(localStartDate.until(localEndDate, ChronoUnit.MONTHS));
}
public static long calculateHours(String startTime, String endTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(PATTERN_YMD_HMS);
LocalDateTime localStartDate = LocalDateTime.parse(startTime, formatter);
LocalDateTime localEndDate = LocalDateTime.parse(endTime, formatter);
return Math.abs(localStartDate.until(localEndDate, ChronoUnit.HOURS));
}
public static String datePlusDay(String startTime, int i) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(PATTERN_YMD);
LocalDate localStartDate = LocalDate.parse(startTime, formatter);
LocalDate localDateAfterAddingDays = localStartDate.plusDays(i);
return localDateAfterAddingDays.format(DateTimeFormatter.ofPattern(PATTERN_YMD));
}
public static int differentDays(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if (year1 != year2) {
int timeDistance = 0;
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
timeDistance += 366;
} else
{
timeDistance += 365;
}
}
return timeDistance + (day2 - day1);
} else {
return day2 - day1;
}
}
}