import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DateUtil {
private static final Logger log = LoggerFactory.getLogger(DateUtil.class);
public static final DateTimeFormatter DATE_TIME_FORMATTER_1 = DateTimeFormatter.ofPattern(“yyyyMMdd HHmmss”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_2 = DateTimeFormatter.ofPattern(“yyyyMMdd”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_3 = DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_4 = DateTimeFormatter.ofPattern(“yyyyMMddHHmmss”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_5 = DateTimeFormatter.ofPattern(“yyyy年MM月dd日HH:mm:ss”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_6 = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss.S”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_7 = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss.SSS”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_8 = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_9 = DateTimeFormatter.ofPattern(“yyyy年MM月dd日”);
public static final DateTimeFormatter DATE_TIME_FORMATTER_10 = DateTimeFormatter.ofPattern(“yyyy年M月dd日”);
public static final Integer SECOND_OF_MINUTE = 60;
public DateUtil() {
}
public static String convertTimestamp2YyyyMMddHHmmss(Long timestamp) {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()).format(DATE_TIME_FORMATTER_8);
}
public static boolean beforTodayFormat3(String dateStr) {
LocalDate date = LocalDate.parse(dateStr, DATE_TIME_FORMATTER_3);
return LocalDate.now().isAfter(date);
}
public static LocalDate convertyyyyMMdd2LocalDate(String dateString) {
return LocalDate.parse(dateString, DATE_TIME_FORMATTER_2);
}
public static LocalDate convertyyyyMMddWithHyphen2LocalDate(String dateString) {
return LocalDate.parse(dateString, DATE_TIME_FORMATTER_3);
}
public static LocalDate convertyyyyMMddHHmmss2LocalDate(String dateString) {
return LocalDate.parse(dateString, DATE_TIME_FORMATTER_8);
}
public static LocalDate convertyyyyMMddHHmmssS2LocalDate(String dateString) {
return LocalDate.parse(dateString, DATE_TIME_FORMATTER_6);
}
public static LocalDate convertyyyyMMddHHmmssSSS2LocalDate(String dateString) {
return LocalDate.parse(dateString, DATE_TIME_FORMATTER_7);
}
public static LocalDateTime convertyyyyMMdd2LocalDateTime(String dateString) {
return LocalDateTime.parse(dateString, DATE_TIME_FORMATTER_3);
}
public static LocalDateTime convertyyyyMMddHHmmss2LocalDateTime(String dateString) {
return LocalDateTime.parse(dateString, DATE_TIME_FORMATTER_8);
}
public static LocalDateTime convertyyyyMMddHHmmssS2LocalDateTime(String dateString) {
return LocalDateTime.parse(dateString, DATE_TIME_FORMATTER_6);
}
public static LocalDateTime convertyyyyMMddHHmmssSSS2LocalDateTime(String dateString) {
return LocalDateTime.parse(dateString, DATE_TIME_FORMATTER_7);
}
public static Date addSeconds(Date date, Long seconds) {
LocalDateTime expDateTime = convertDate2LocalDateTime(date).plusSeconds(seconds);
return convertLocalDateTime2Date(expDateTime);
}
public static int getDiffDay(Date dateFrom, Date dateTo) {
long diffTime = dateFrom.getTime() - dateTo.getTime();
long diff = diffTime / 86400000L;
return (int)diff;
}
public static String dateIntervalHourMinForDate(Date date1, Date date2) {
try {
if (date1 != null && date2 != null) {
return coreDateIntervalHourMin(date1, date2);
}
} catch (Exception var3) {
log.error("计算时间差 error", var3);
}
return "";
}
public static String coreDateIntervalHourMin(Date date1, Date date2) {
long l = date2.getTime() - date1.getTime();
long hour = l / 3600000L;
long min = l / 60000L - hour * 60L;
return hour + "时" + min + "分";
}
public static int differentDaysByMillisecond(Date date1, Date date2) {
int days = (int)((date2.getTime() - date1.getTime()) / 86400000L);
return days;
}
public static String convertBookTimeInAdvance2yyyyMMddHHmmss(Integer bookTimeInAdvance) {
LocalDateTime startOfToday = LocalDate.now().atStartOfDay();
LocalDateTime localDateTime = startOfToday.minusMinutes(bookTimeInAdvance.longValue());
return localDateTime.format(DATE_TIME_FORMATTER_1);
}
public static String convertDate2yyyyMMdd(Date date) {
return convertDate2LocalDateTime(date).format(DATE_TIME_FORMATTER_2);
}
public static String convertDate2yyyyMMddssss(Date date) {
return convertDate2LocalDateTime(date).format(DATE_TIME_FORMATTER_7);
}
public static String convertDate2Str(Date date, DateTimeFormatter formatter) {
return convertDate2LocalDateTime(date).format(formatter);
}
public static LocalDateTime convertDate2LocalDateTime(Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}
public static Date convertLocalDateTime2Date(LocalDateTime date) {
return Date.from(date.atZone(ZoneId.systemDefault()).toInstant());
}
public static String convertDate2yyyyMMddWithMinus(LocalDate date) {
if (null == date) {
date = LocalDate.now();
}
return date.format(DATE_TIME_FORMATTER_3);
}
public static Date convertYyyyMMdd2Date(String yyyyMMddString) {
LocalDate parse = LocalDate.parse(yyyyMMddString, DATE_TIME_FORMATTER_2);
return Date.from(parse.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
public static Date convertYyyyMMddWithMinus2Date(String yyyyMMddString) {
LocalDate parse = LocalDate.parse(yyyyMMddString, DATE_TIME_FORMATTER_3);
return Date.from(parse.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
public static LocalDateTime getNowDateStringSplit(Integer split) {
LocalDateTime now = LocalDateTime.now();
return getDateStringSplitByLocalDate(now, split);
}
public static LocalDateTime getDateStringSplitByDate(Date date, Integer split) {
LocalDateTime localDateTime = convertDate2LocalDateTime(date);
return getDateStringSplitByLocalDate(localDateTime, split);
}
public static LocalDateTime getDateStringSplitByLocalDate(LocalDateTime date, Integer split) {
int nowSecond = date.getSecond();
int quotient = nowSecond / split;
int remainder = nowSecond % split;
int second;
if (remainder != 0) {
second = (quotient + 1) * split;
} else {
second = quotient * split;
}
return second == SECOND_OF_MINUTE ? date.withSecond(0).plusMinutes(1L) : date.withSecond(second);
}
public static String convertDate2yyyyMMddHHmmssWithoutBlank(LocalDateTime localDateTime) {
return localDateTime.format(DATE_TIME_FORMATTER_4);
}
public static String convertDate2yyyyMMddHHmmss(LocalDateTime localDateTime) {
return localDateTime.format(DATE_TIME_FORMATTER_8);
}
public static String convertDate2yyyyMMddHHmmssWithChinese(LocalDateTime localDateTime) {
return localDateTime.format(DATE_TIME_FORMATTER_5);
}
public static LocalDateTime convertYyyyMMddHHmmssWithChinese2Date(String localDateTime) {
return LocalDateTime.parse(localDateTime, DATE_TIME_FORMATTER_5);
}
public static String convertDate2yyyyMMddWithChinese(LocalDateTime localDateTime) {
return localDateTime.format(DATE_TIME_FORMATTER_9);
}
public static Long convertLocalDateTime2Timestamp(LocalDateTime localDateTime) {
return localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
public static LocalDateTime convertTimestamp2LocalDateTime(Long timestamp) {
return LocalDateTime.ofEpochSecond(timestamp / 1000L, 0, ZoneOffset.ofHours(8));
}
public static String getStartTimeString(Long diff) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(11, 24);
calendar.set(12, 0);
calendar.set(13, 0);
Date endTime = calendar.getTime();
Long startTime = endTime.getTime() - diff * 1000L;
calendar.setTimeInMillis(startTime);
return calendar.get(11) + ":" + calendar.get(12);
}
public static Long getDiffTimes(String time) {
if (!StringUtils.isNotBlank(time)) {
return 0L;
} else {
Preconditions.checkArgument(time.contains(":"), "时间格式不正确");
String[] times = time.split(":");
Preconditions.checkArgument(times.length == 2, "时间格式不正确");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(11, Integer.valueOf(times[0]));
calendar.set(12, Integer.valueOf(times[1]));
calendar.set(13, 0);
Date startTime = calendar.getTime();
calendar.set(11, 24);
calendar.set(12, 0);
calendar.set(13, 0);
Date endTime = calendar.getTime();
Long diff = endTime.getTime() - startTime.getTime();
if (diff > 0L) {
diff = diff / 1000L;
}
return diff;
}
}
public static String convertDate10FromLong(Long timestamp) {
return convertDate2LocalDateTime(new Date(timestamp)).format(DATE_TIME_FORMATTER_10);
}
}