package com.avanline.simple;
import java.time.*;
import java.time.format.DateTimeFormatter;
public class DateUtil {
public enum NodeEnum {
YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND
}
public static final DateTimeFormatter DF_YMD_SEPARATE =
DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static final DateTimeFormatter DF_SEPARATE =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static final DateTimeFormatter DF_HMS =
DateTimeFormatter.ofPattern("HH:mm:ss");
public static final DateTimeFormatter DF_YMD_CN =
DateTimeFormatter.ofPattern("yyyy年MM月dd日");
public static final DateTimeFormatter DF_SEPARATE_CN =
DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒");
public static final DateTimeFormatter DF_HM_CN =
DateTimeFormatter.ofPattern("HH时mm分ss秒");
public static long getMilli() {
return Instant.now().toEpochMilli();
}
public static long getSecond() {
return Instant.now().getEpochSecond();
}
public static String dateToString(LocalDate pDate
, DateTimeFormatter pFormatter) {
return dateTimeToString(pDate.atStartOfDay(), pFormatter);
}
public static String dateTimeToString(LocalDateTime pDateTime
, DateTimeFormatter pFormatter) {
return pDateTime.format(pFormatter);
}
public static String milliToString(long currentTime
, DateTimeFormatter pFormatter) {
return pFormatter.format(
milliToDateTime(currentTime)
);
}
public static String secondToString(long currentTime
, DateTimeFormatter pFormatter) {
return pFormatter.format(
secondToDateTime(currentTime)
);
}
public static LocalDateTime secondToDateTime(long currentTime) {
return LocalDateTime.ofInstant(
Instant.ofEpochSecond(currentTime), ZoneId.systemDefault()
);
}
public static LocalDateTime milliToDateTime(long currentTime) {
return LocalDateTime.ofInstant(
Instant.ofEpochMilli(currentTime), ZoneId.systemDefault()
);
}
public static LocalDateTime stringToDateTime(String strTime
, DateTimeFormatter pFormatter) {
return LocalDateTime.parse(strTime, pFormatter);
}
public static long stringToMilli(String strTime
, DateTimeFormatter pFormatter) {
return stringToDateTime(strTime, pFormatter)
.atZone(
ZoneId.systemDefault()
).toInstant().toEpochMilli();
}
public static long stringToSecond(String strTime
, DateTimeFormatter pFormatter) {
return stringToDateTime(strTime, pFormatter)
.atZone(
ZoneId.systemDefault()
).toInstant().getEpochSecond();
}
public static long dateTimeToMilli(LocalDateTime pDateTime) {
return pDateTime.atZone(
ZoneId.systemDefault()
).toInstant().toEpochMilli();
}
public static long dateTimeToSecond(LocalDateTime pDateTime) {
return pDateTime.atZone(
ZoneId.systemDefault()
).toInstant().getEpochSecond();
}
public static LocalDateTime getAfterOrPreNowTime(int num, NodeEnum pNodeEnum) {
return getAfterOrPreNowTime(num, pNodeEnum, LocalDateTime.now());
}
public static LocalDateTime getAfterOrPreNowTime(int num, NodeEnum pNodeEnum,
LocalDateTime pDateTime) {
LocalDateTime mLocalDateTime = null;
switch (pNodeEnum) {
case YEAR:
mLocalDateTime = pDateTime.plusYears(num);
break;
case MONTH:
mLocalDateTime = pDateTime.plusMonths(num);
break;
case DAY:
mLocalDateTime = pDateTime.plusDays(num);
break;
case HOUR:
mLocalDateTime = pDateTime.plusHours(num);
break;
case MINUTE:
mLocalDateTime = pDateTime.plusMinutes(num);
break;
case SECOND:
mLocalDateTime = pDateTime.plusSeconds(num);
break;
case WEEK:
mLocalDateTime = pDateTime.plusWeeks(num);
break;
}
return mLocalDateTime;
}
public static LocalDateTime getMaxNowDate() {
return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
}
public static LocalDateTime getMinNowDate() {
return LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
}
public static LocalDateTime getMinTime(LocalDateTime pDateTime) {
return pDateTime.with(LocalTime.MIN);
}
public static LocalDateTime getMaxTime(LocalDateTime pDateTime) {
return pDateTime.with(LocalTime.MAX);
}
public static DateTimeFormatter getDateTimeFormatter(String format) {
return DateTimeFormatter.ofPattern(format);
}
public static String getWeekOfDate(LocalDateTime date) {
return getWeekOfDate(date, TextStyle.SHORT);
}
public static String getWeekOfDate(LocalDateTime date, TextStyle textStyle) {
return getWeekOfDate(date, textStyle, Locale.CHINA);
}
public static String getWeekOfDate(LocalDateTime date, TextStyle textStyle, Locale locale) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
return dayOfWeek.getDisplayName(textStyle, locale);
}
public static String getDateDetail(LocalDateTime pDateTime) {
LocalDateTime now = LocalDateTime.now();
Duration duration = Duration.between(pDateTime, now);
if (duration.toDays() > 2) {
return dateTimeToString(pDateTime, DF_YMD_SEPARATE);
}
if (pDateTime.isAfter(now)) {
return dateTimeToString(pDateTime, DF_YMD_SEPARATE);
}
if (pDateTime.getDayOfMonth() - now.getDayOfMonth() == -1) {
return "昨天";
}
if (pDateTime.getDayOfMonth() - now.getDayOfMonth() == -2) {
return "前天";
}
if (duration.toHours() > 0) {
return duration.toHours() + "小时以前";
}
if (duration.toMinutes() == 0) {
return "刚刚";
}
return duration.toMinutes() + "分钟以前";
}
public static void main(String[] args) {
System.out.println("LocalDate转string:"
+ dateToString(LocalDate.now(), DF_SEPARATE));
System.out.println("LocalDateTime转string:"
+ dateTimeToString(LocalDateTime.now(), DF_SEPARATE));
System.out.println("string转LocalDateTime:"
+ stringToDateTime("2020-10-29 17:00:59", DF_SEPARATE));
System.out.println("带毫秒的时间戳转string:"
+ milliToString(getMilli(), DF_SEPARATE));
System.out.println("不带毫秒的时间戳转string:"
+ secondToString(getSecond(), DF_SEPARATE));
System.out.println("string转毫秒时间戳:" +
stringToMilli("2020-10-29 12:20:40", DF_SEPARATE));
System.out.println("string转不带毫秒时间戳:" +
stringToSecond("2020-10-29 12:20:40", DF_SEPARATE));
System.out.println("LocalDateTime转毫秒时间戳:"
+ dateTimeToMilli(LocalDateTime.now()));
System.out.println("LocalDateTime转秒级时间戳:"
+ dateTimeToSecond(LocalDateTime.now()));
System.out.println("获取当前时间 一天前的LocalDateTime:"
+ getAfterOrPreNowTime(-1, NodeEnum.DAY));
System.out.println("获取指定时间周几:"
+ getWeekOfDate(stringToDateTime(
"2020-10-25 12:20:40", DF_SEPARATE)));
LocalDateTime mLocalDateTime = getAfterOrPreNowTime(-1, NodeEnum.DAY);
System.out.println("时间转化:" + getDateDetail(mLocalDateTime));
mLocalDateTime = getAfterOrPreNowTime(-2, NodeEnum.DAY);
System.out.println("时间转化:" + mLocalDateTime + "--------"
+ getDateDetail(mLocalDateTime));
mLocalDateTime = getAfterOrPreNowTime(-1, NodeEnum.MONTH);
System.out.println("时间转化:" + mLocalDateTime + "--------"
+ getDateDetail(mLocalDateTime));
mLocalDateTime = getAfterOrPreNowTime(-1, NodeEnum.MINUTE);
System.out.println("时间转化:" + mLocalDateTime + "--------"
+ getDateDetail(mLocalDateTime));
mLocalDateTime = getAfterOrPreNowTime(-1, NodeEnum.HOUR);
System.out.println("时间转化:" + mLocalDateTime + "--------"
+ getDateDetail(mLocalDateTime));
mLocalDateTime = getAfterOrPreNowTime(-23, NodeEnum.HOUR);
System.out.println("时间转化:" + mLocalDateTime + "--------"
+ getDateDetail(mLocalDateTime));
System.out.println("获取今日最小时间:" + getMinNowDate());
System.out.println("获取今日最大时间:" + getMaxNowDate());
System.out.println("获取指定日期的最小时间:"
+ mLocalDateTime + "--------" + getMinTime(mLocalDateTime));
System.out.println("获取指定日期的最大时间:"
+ mLocalDateTime + "--------" + getMaxTime(mLocalDateTime));
}
}
打印日志:
LocalDate转string:2020-10-29 00:00:00
LocalDateTime转string:2020-10-29 18:43:22
string转LocalDateTime:2020-10-29T17:00:59
带毫秒的时间戳转string:2020-10-29 18:43:22
不带毫秒的时间戳转string:2020-10-29 18:43:22
string转毫秒时间戳:1603945240000
string转不带毫秒时间戳:1603945240
LocalDateTime转毫秒时间戳:1603968202339
LocalDateTime转秒级时间戳:1603968202
获取当前时间 一天前的LocalDateTime:2020-10-28T18:43:22.340
获取指定时间周几:星期日
时间转化:昨天
时间转化:2020-10-27T18:43:22.341
时间转化:2020-09-29T18:43:22.341
时间转化:2020-10-29T18:42:22.341
时间转化:2020-10-29T17:43:22.341
时间转化:2020-10-28T19:43:22.341
获取今日最小时间:2020-10-29T00:00
获取今日最大时间:2020-10-29T23:59:59.999999999
获取指定日期的最小时间:2020-10-28T19:43:22.341
获取指定日期的最小=大时间:2020-10-28T19:43:22.341