16. Java8的日期处理
大约 12 分钟
关键类
- Instant:瞬时实例。
- LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。
- LocalTime:本地时间,不包含日期。
- LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
- ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。
新API还引入了 ZoneOffSet 和 ZoneId 类,使得解决时区问题更为简便。解析、格式化时间的 DateTimeFormatter 类也全部重新设计。
测试:
public static void java8DateTest() {
/**
* LocalDate
*/
System.out.println(">>>>>>>>>LocalDate<<<<<<<<");
//获取当前日期,2018-08-21
LocalDate localDate = LocalDate.now();
System.err.println("当前日期>" + localDate);
//获取当前年 2018
System.err.println(localDate + "当前年>" + localDate.getYear());
//获取当前月 8
System.err.println(localDate + "当前月>" + localDate.getMonthValue());
//获取当前年中的日 233
System.err.println(localDate + "当前年中的日>" + localDate.getDayOfYear());
//获取当前月中的日 21
System.err.println(localDate + "当前月中的日>" + localDate.getDayOfMonth());
//获取当前星期中的日 2
System.err.println(localDate + "当前星期中的日>" + localDate.getDayOfWeek().getValue());
//当前日期前一天,2018-08-20 minus:(表示运算)减去
System.err.println(localDate + "前一天>" + localDate.minusDays(1));
//当前日期后一天,2018-08-20 plus:(表示运算)加
System.err.println(localDate + "后一天>" + localDate.plusDays(1));
//当前日期前一月,2018-07-21 minus:(表示运算)减去
System.err.println(localDate + "前一月>" + localDate.minusMonths(1));
//当前日期后一月,2018-09-21 plus:(表示运算)加
System.err.println(localDate + "后一月>" + localDate.plusMonths(1));
//当前日期前一年,2017-08-21 minus:(表示运算)减去
System.err.println(localDate + "前一年>" + localDate.minusYears(1));
//当前日期后一年,2019-08-21 plus:(表示运算)加
System.err.println(localDate + "后一年>" + localDate.plusYears(1));
//当前日期前一周,2018-08-14 minus:(表示运算)减去
System.err.println(localDate + "前一周>" + localDate.minusWeeks(1));
//当前日期后一周,2018-08-28 plus:(表示运算)加
System.err.println(localDate + "后一周>" + localDate.plusWeeks(1));
/**
* LocalTime
*/
System.out.println(">>>>>>>>>LocalTime<<<<<<<<");
//获取当前时间 11:36:13.693
LocalTime localTime = LocalTime.now();
System.err.println("当前时间>" + localTime);
//获取当前时 11
System.err.println(localTime + "当前时>" + localTime.getHour());
//获取当前分 38
System.err.println(localTime + "当前分>" + localTime.getMinute());
//获取当前秒 26
System.err.println(localTime + "当前秒>" + localTime.getSecond());
//当前时间前一时,11:36:12.693 minus:(表示运算)减去
System.err.println(localTime + "前一时>" + localTime.minusHours(1));
//当前时间后一时,11:36:12.693 minus:(表示运算)减去
System.err.println(localTime + "后一时>" + localTime.plusHours(1));
//当前时间前一分,11:39:05.970 minus:(表示运算)减去
System.err.println(localTime + "前一分>" + localTime.minusMinutes(1));
//当前时间后一分,11:36:12.693 minus:(表示运算)减去
System.err.println(localTime + "后一分>" + localTime.plusMinutes(1));
//当前时间前一秒,11:36:12.693 minus:(表示运算)减去
System.err.println(localTime + "前一秒>" + localTime.minusSeconds(1));
//当前时间后一秒,11:36:12.693 minus:(表示运算)减去
System.err.println(localTime + "后一秒>" + localTime.plusSeconds(1));
/**
* localDateTime
* LocalDateTime类是Java 8中日期时间功能里,用于表示当地的日期与时间的类,它的值是无时区属性的。
* 你可以将其视为Java 8中LocalDate与LocalTime两个类的结合。
* 你可以通过这些方法访问其日期时间
* getYear()
getMonth()
getDayOfMonth()
getDayOfWeek()
getDayOfYear()
getHour()
getMinute()
getSecond()
getNano()
*/
System.out.println(">>>>>>>>>localDateTime<<<<<<<<");
LocalDateTime localDateTime = LocalDateTime.now();
System.err.println("当前完整日期>" + localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
/**
* 时间格式化
*/
System.out.println(">>>>>>>>>时间格式化<<<<<<<<");
DateTimeFormatter formatDataTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatDate = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter formatTime = DateTimeFormatter.ofPattern("HH:mm:ss");
String formatDataTimeStr = localDateTime.format(formatDataTime);
String formatDateStr = localDateTime.format(formatDate);
String formatTimeStr = localDateTime.format(formatTime);
System.err.println("完整日期格式化之后" + formatDataTimeStr);
System.err.println("日期格式化之后" + formatDateStr);
System.err.println("时间格式化之后" + formatTimeStr);
/**
* 时间比较大小
*/
System.out.println(">>>>>时间比较大小<<<<<");
LocalDateTime time1 = LocalDateTime.parse("2018-05-12 08:30:30", formatDataTime);
LocalDateTime time2 = LocalDateTime.parse("2018-04-20 16:30:30", formatDataTime);
System.err.println("time1=" + time1);
System.err.println("time2=" + time2);
System.err.println("time1==time2:" + time1.isEqual(time2));
System.err.println("time1>time2:" + time1.isAfter(time2));
System.err.println("time1<time2:" + time1.isBefore(time2));
}
基于java8封装的时间处理工具类
package com.ipw.utils;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
* @Author dw
* @ClassName DateUtil
* @Description
* @Date 2020/8/25 16:39
* @Version 1.0
*/
public class DateUtil {
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间格式的连接符 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 连接符 -
*/
private static final String HYPHEN = "-";
/**
* 连接符 :
*/
private static final String COLON = ":";
/**
* 连接符 .
*/
private static final String POINT = ".";
/**
* 连接符 "年"
*/
private static final String YEAR = "年";
/**
* 连接符 "月"
*/
private static final String MONTH = "月";
/**
* 连接符 "日"
*/
private static final String DAY = "日";
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间格式 字符串 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 年的时间格式
* 返回 "yyyy" 字符串
*/
public static final String YEAR_FORMAT_YYYY = "yyyy";
/**
* 月的时间格式
* 返回 "MM" 字符串
*/
public static final String MONTH_FORMAT_MM = "MM";
/**
* 日的时间格式
* 返回 "dd" 字符串
*/
public static final String DAY_FORMAT_DD = "dd";
/**
* 小时的时间格式
* 返回 "HH" 字符串
*/
public static final String HOUR_FORMAT_HH = "HH";
/**
* 分的时间格式
* 返回 "mm" 字符串
*/
public static final String MINUTE_FORMAT_MM = "mm";
/**
* 秒的时间格式
* 返回 "ss" 字符串
*/
public static final String SECOND_FORMAT_SS = "ss";
/**
* 返回 "yyyy-MM-dd" 字符串
*/
public static final String DATE_FORMAT_HYPHEN = new StringBuffer()
.append(YEAR_FORMAT_YYYY)
.append(HYPHEN)
.append(MONTH_FORMAT_MM)
.append(HYPHEN)
.append(DAY_FORMAT_DD).toString();
/**
* 返回 "yyyy:MM:dd" 字符串
*/
public static final String DATE_FORMAT_COLON = new StringBuffer()
.append(YEAR_FORMAT_YYYY)
.append(COLON)
.append(MONTH_FORMAT_MM)
.append(COLON)
.append(DAY_FORMAT_DD).toString();
/**
* 返回 "yyyy年MM月dd日" 字符串
*/
public static final String DATE_FORMAT_CHINESE = new StringBuffer()
.append(YEAR_FORMAT_YYYY)
.append(YEAR)
.append(MONTH_FORMAT_MM)
.append(MONTH)
.append(DAY_FORMAT_DD)
.append(DAY).toString();
/**
* 返回 "yyyy.MM.dd" 字符串
*/
public static final String DATE_FORMAT_POINT = new StringBuffer()
.append(YEAR_FORMAT_YYYY)
.append(POINT)
.append(MONTH_FORMAT_MM)
.append(POINT)
.append(DAY_FORMAT_DD).toString();
/**
* 返回 "yyyyMMdd" 字符串
*/
public static final String DATE_FORMAT_WITH_NO_JOINER = new StringBuffer()
.append(YEAR_FORMAT_YYYY)
.append(MONTH_FORMAT_MM)
.append(DAY_FORMAT_DD).toString();
/**
* 返回 "HH:mm:ss" 字符串
*/
public static final String TIME_FORMAT_COLON = new StringBuffer()
.append(HOUR_FORMAT_HH)
.append(COLON)
.append(MINUTE_FORMAT_MM)
.append(COLON)
.append(SECOND_FORMAT_SS).toString();
/**
* 返回 "HHmmss" 字符串
*/
public static final String TIME_FORMAT_NO_JOINER = new StringBuffer()
.append(HOUR_FORMAT_HH)
.append(MINUTE_FORMAT_MM)
.append(SECOND_FORMAT_SS).toString();
/**
* 返回 "yyyy-MM-dd HH:mm:ss" 字符串
*/
public static final String DATE_TIME_FORMAT_HYPHEN = new StringBuffer()
.append(DATE_FORMAT_HYPHEN)
.append(" ")
.append(TIME_FORMAT_COLON).toString();
/**
* 返回 "yyyyMMddHHmmss" 字符串
*/
public static final String DATE_TIME_FORMAT_WITH_NO_JOINER = new StringBuffer()
.append(DATE_FORMAT_WITH_NO_JOINER)
.append(TIME_FORMAT_NO_JOINER).toString();
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间格式 字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间格式 DateTimeFormatter (Java8) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
public enum FormatEnum {
/**
* 返回 DateTimeFormatter "yyyy-MM-dd" 时间格式
*/
DATE_FORMAT_HYPHEN(DateTimeFormatter.ofPattern(DateUtil.DATE_FORMAT_HYPHEN)),
/**
* 返回 DateTimeFormatter "yyyy:MM:dd" 时间格式
*/
DATE_FORMAT_COLON(DateTimeFormatter.ofPattern(DateUtil.DATE_FORMAT_COLON)),
/**
* 返回 DateTimeFormatter "yyyy年MM月dd日" 时间格式
*/
DATE_FORMAT_CHINESE(DateTimeFormatter.ofPattern(DateUtil.DATE_FORMAT_CHINESE)),
/**
* 返回 DateTimeFormatter "yyyy.MM.dd日" 时间格式
*/
DATE_FORMAT_POINT(DateTimeFormatter.ofPattern(DateUtil.DATE_FORMAT_POINT)),
/**
* 返回 DateTimeFormatter "yyyyMMdd" 时间格式
*/
DATE_FORMAT_WITH_NO_JOINER(DateTimeFormatter.ofPattern(DateUtil.DATE_FORMAT_WITH_NO_JOINER)),
/**
* 返回 DateTimeFormatter "HH:mm:ss" 时间格式
*/
TIME_FORMAT_COLON(DateTimeFormatter.ofPattern(DateUtil.TIME_FORMAT_COLON)),
/**
* 返回 DateTimeFormatter "yyyy-MM-dd HH:mm:ss" 时间格式
*/
DATE_TIME_FORMAT_HYPHEN(DateTimeFormatter.ofPattern(DateUtil.DATE_TIME_FORMAT_HYPHEN)),
/**
* 返回 DateTimeFormatter "yyyyMMddHHmmss"的时间格式
*/
DATE_TIME_FORMAT_WITH_NO_JOINER(DateTimeFormatter.ofPattern(DateUtil.DATE_TIME_FORMAT_WITH_NO_JOINER));
private DateTimeFormatter value;
FormatEnum(DateTimeFormatter format) {
this.value = format;
}
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间格式 DateTimeFormatter (Java8) ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间戳 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取秒级时间戳
*/
public static Long currentTimestampBySecond() {
return localDateTime().toEpochSecond(ZoneOffset.of("+8"));
}
/**
* 获取毫秒级时间戳
*/
public static Long currentTimestampByMillisecond() {
return localDateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间戳 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 当前时间相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取当前详细时间,like 2018-08-27 17:20:06
*/
public static String currentDateTime() {
return localDateTime().format(FormatEnum.DATE_TIME_FORMAT_HYPHEN.value);
}
/**
* 获取当前详细时间,like 20180827172006
*/
public static String currentDateTimeNoJoiner() {
return localDateTime().format(FormatEnum.DATE_TIME_FORMAT_WITH_NO_JOINER.value);
}
/**
* 获取 LocalDateTime
*/
private static LocalDateTime localDateTime() {
return LocalDateTime.now();
}
/**
* 获取当前日期,like 2018-08-27
*/
public static String currentDate() {
return LocalDate.now().format(FormatEnum.DATE_FORMAT_HYPHEN.value);
}
/**
* 获取当前时间,like 17:20:06
*/
public static String currentTime() {
return LocalTime.now().format(FormatEnum.TIME_FORMAT_COLON.value);
}
/**
* 获取当前年
*/
public static Integer currentYear() {
return LocalDate.now().getYear();
}
/**
* 获取当前月
*/
public static int currentMonth() {
return LocalDate.now().getMonthValue();
}
/**
* 获取当前时间在年中的第几天
*/
public static Integer currentDayOfYear() {
return LocalDate.now().getDayOfYear();
}
/**
* 获取当前时间在月中的第几天
*/
public static Integer currentDayOfMonth() {
return LocalDate.now().getDayOfMonth();
}
/**
* 获取当前时间在星期中的第几天
*/
public static Integer currentDayOfWeek() {
return LocalDate.now().getDayOfWeek().getValue();
}
/**
* 获取当前小时
*/
public static Integer currentHour() {
return LocalTime.now().getHour();
}
/**
* 获取当前分钟
*/
public static Integer currentMinute() {
return LocalTime.now().getMinute();
}
/**
* 获取当前秒
*/
public static Integer currentSecond() {
return LocalTime.now().getSecond();
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 当前时间相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 当前时间的未来、历史时间相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取当前年的 前几年 的日期 (年相减)
* @param years 前几年 正整数
* @param formatEnum 格式
* @return 当前年的 前几年 的 对应 格式 日期
*/
public static String currentYearsMinus(Long years, FormatEnum formatEnum) {
return minusOrPlusYears(-years, formatEnum);
}
/**
* 获取当前年的 后几年 的日期 (年相加)
* @param years 后几年 正整数
* @param formatEnum 格式
* @return 当前年的 后几年 的 对应 格式 日期
*/
public static String currentYearsPlus(Long years, FormatEnum formatEnum) {
return minusOrPlusYears(years, formatEnum);
}
/**
* 获取当前月的 前几月 日期
* @param months 前几月 正整数
* @param formatEnum 格式
* @return 当前月的 前几月 的 对应 格式 日期
*/
public static String currentMonthsMinus(Long months, FormatEnum formatEnum) {
return minusOrPlusMonths(-months, formatEnum);
}
/**
* 获取当前月的 后几月 的日期
* @param months 后几月 正整数
* @param formatEnum 格式
* @return 当前月的 后几月 的 对应 格式 日期
*/
public static String currentMonthsPlus(Long months, FormatEnum formatEnum) {
return minusOrPlusMonths(months, formatEnum);
}
/**
* 获取当前日的 前几日 的日期
* @param days 前几日 正整数
* @param formatEnum 格式
* @return 当前日的 前几日 的 对应 格式 日期
*/
public static String currentDaysMinus(Long days, FormatEnum formatEnum) {
return minusOrPlusDays(-days, formatEnum);
}
/**
* 获取当前日的 后几日 的日期
* @param days 后几日 正整数
* @param formatEnum 格式
* @return 当前日的 后几日 的 对应 格式 日期
*/
public static String currentDaysPlus(Long days, FormatEnum formatEnum) {
return minusOrPlusDays(days, formatEnum);
}
/**
* 获取当前星期的 前几星期 的日期
* @param weeks 前几星期 正整数
* @param formatEnum 格式
* @return 当前星期的 前几星期 的 对应 格式 日期
*/
public static String currentWeeksMinus(Long weeks, FormatEnum formatEnum) {
return minusOrPlusWeeks(-weeks, formatEnum);
}
/**
* 获取当前星期的 后几星期 的日期
* @param weeks 后几星期 正整数
* @param formatEnum 格式
* @return 当前星期的 后几星期 的 对应 格式 日期
*/
public static String currentWeeksPlus(Long weeks, FormatEnum formatEnum) {
return minusOrPlusWeeks(weeks, formatEnum);
}
/**
* 获取当前小时的 前几小时 的日期
* @param hours 前几小时 正整数
* @param formatEnum 格式
* @return 当前小时的 前几小时 的 对应 格式 日期
*/
public static String currentHoursMinus(Long hours, FormatEnum formatEnum) {
return minusOrPlusHours(-hours, formatEnum);
}
/**
* 获取当前小时的 后几小时 的日期
* @param hours 后几小时 正整数
* @param formatEnum 格式
* @return 当前小时的 后几小时 的 对应 格式 日期
*/
public static String currentHoursPlus(Long hours, FormatEnum formatEnum) {
return minusOrPlusHours(hours, formatEnum);
}
/**
* 获取当前分钟的 前几分钟 的日期
* @param minutes 前几分钟 正整数
* @param formatEnum 格式
* @return 当前分钟的 前几分钟 的 对应 格式 日期
*/
public static String currentMinutesMinus(Long minutes, FormatEnum formatEnum) {
return minusOrPlusMinutes(-minutes, formatEnum);
}
/**
* 获取当前分钟的 后几分钟 的日期
* @param minutes 后几分钟 正整数
* @param formatEnum 格式
* @return 当前分钟的 后几分钟 的 对应 格式 日期
*/
public static String currentMinutesPlus(Long minutes, FormatEnum formatEnum) {
return minusOrPlusMinutes(minutes, formatEnum);
}
/**
* 获取当前秒的 前几秒 的日期
* @param seconds 前几秒 正整数
* @param formatEnum 格式
* @return 当前秒的 前几秒 的 对应 格式 日期
*/
public static String currentSecondsMinus(Long seconds, FormatEnum formatEnum) {
return minusOrPlusSeconds(-seconds, formatEnum);
}
/**
* 获取当前秒的 前几秒/后几秒 的日期
* @param seconds 后几秒 正整数
* @param formatEnum 格式
* @return 当前秒的 后几秒 的 对应 格式 日期
*/
public static String currentSecondsPlus(Long seconds, FormatEnum formatEnum) {
return minusOrPlusSeconds(seconds, formatEnum);
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 当前时间的未来、历史时间相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间转换相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* Date类型转LocalDateTime
* @param date date类型时间
* @return LocalDateTime
*/
public static LocalDateTime convertToLocalDateTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}
/**
* Date类型转LocalDate
* @param date date类型时间
* @return LocalDate
*/
public static LocalDate convertToLocalDate(Date date) {
return convertToLocalDateTime(date).toLocalDate();
}
/**
* Date类型转LocalTime
* @param date date类型时间
* @return LocalTime
*/
public static LocalTime convertToLocalTime(Date date) {
return convertToLocalDateTime(date).toLocalTime();
}
/**
* LocalDateTime 类型转 Date
* @param localDateTime localDateTime
* @return 转换后的Date类型日期
*/
public static Date convertToDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* LocalDate类型转Date
* @param localDate localDate
* @return 转换后的Date类型日期
*/
public static Date convertToDate(LocalDate localDate) {
return convertToDate(localDate.atStartOfDay());
}
/**
* LocalTime类型转Date
*
* @param localTime localTime
* @return 转换后的Date类型日期
*/
public static Date convertToDate(LocalTime localTime) {
return convertToDate(LocalDateTime.of(LocalDate.now(), localTime));
}
/**
* String格式 转 LocalDateTime
*/
public static LocalDateTime convertToLocalDateTime(String dateStr, FormatEnum formatEnum){
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, formatEnum.value);
return localDateTime;
}
/**
* String格式 转 LocalDate
*/
public static LocalDate convertToLocalDate(String dateStr, FormatEnum formatEnum){
LocalDate localDate = LocalDateTime.parse(dateStr, formatEnum.value).toLocalDate();
return localDate;
}
/**
* LocalDateTime 转 String格式
*/
public static String convertToStr(LocalDateTime localDateTime, FormatEnum formatEnum){
String format = localDateTime.format(formatEnum.value);
return format;
}
/**
* LocalDate 转 String格式
*/
public static String convertToStr(LocalDate localDate, FormatEnum formatEnum){
String strData = localDate.format(formatEnum.value);
return strData;
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间转换相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间间隔相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取 endDate-startDate 时间间隔天数
* @param startDate 开始时间
* @param endDate 结束时间
* @return 时间间隔天数
*/
public static Long daysInterval(LocalDate startDate, LocalDate endDate) {
return endDate.toEpochDay() - startDate.toEpochDay();
}
/**
* 获取 endDate-startDate 时间间隔天数
* @param startDate 开始时间
* @param endDate 结束时间
* @return 时间间隔天数
*/
public static Long daysInterval(String startDate, String endDate) {
return daysInterval(convertToLocalDate(startDate, FormatEnum.DATE_FORMAT_HYPHEN),
convertToLocalDate(endDate, FormatEnum.DATE_FORMAT_HYPHEN));
}
/**
* 获取 endDate-startDate 时间间隔天数
* @param startDate 开始时间
* @param endDate 结束时间
* @return 时间间隔天数
*/
public static Long daysInterval(LocalDateTime startDate, LocalDateTime endDate) {
return daysInterval(startDate.toLocalDate(), endDate.toLocalDate());
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间间隔相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓只允许此类调用↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取 当前年 的前几年/后几年的日期
* <p>
*
* @param yearsToAddOrSubtract 后几年传正整数,前几年传负数
* @param formatEnum 格式
* @return 当前年的前几年/后几年的对应 格式 日期
*/
private static String minusOrPlusYears(Long yearsToAddOrSubtract, FormatEnum formatEnum) {
return localDateTime().plusYears(yearsToAddOrSubtract).format(formatEnum.value);
}
/**
* 获取 当前月 的前几月/后几月的日期
*
* @param monthsToAddOrSubtract 后几月传正整数,前几月传负数
* @param formatEnum 格式
* @return 当前月的前几月/后几月的对应 格式 日期
*/
private static String minusOrPlusMonths(Long monthsToAddOrSubtract, FormatEnum formatEnum) {
return localDateTime().plusMonths(monthsToAddOrSubtract).format(formatEnum.value);
}
/**
* 获取 当前日 的前几日/后几日的日期
*
* @param daysToAddOrSubtract 后几日传正整数,前几日传负数
* @param formatEnum 格式
* @return 当前日的前几日/后几日的 对应 格式 日期
*/
private static String minusOrPlusDays(Long daysToAddOrSubtract, FormatEnum formatEnum) {
return localDateTime().plusDays(daysToAddOrSubtract).format(formatEnum.value);
}
/**
* 获取当前星期的前几星期/后几星期的日期
*
* @param weeksToAddOrSubtract 后几星期传正整数,前几星期传负数
* @param formatEnum 格式
* @return 当前星期的前几星期/后几星期的 对应 格式 日期
*/
private static String minusOrPlusWeeks(Long weeksToAddOrSubtract, FormatEnum formatEnum) {
return localDateTime().plusWeeks(weeksToAddOrSubtract).format(formatEnum.value);
}
/**
* 获取当前小时的前几小时/后几小时的日期
*
* @param hoursToAddOrSubtract 后几小时传正整数,前几小时传负数
* @param formatEnum 格式
* @return 当前小时的前几小时/后几小时的 对应 格式 日期
*/
private static String minusOrPlusHours(Long hoursToAddOrSubtract, FormatEnum formatEnum) {
return localDateTime().plusHours(hoursToAddOrSubtract).format(formatEnum.value);
}
/**
* 获取当前分钟的前几分钟/后几分钟的日期
*
* @param minutesToAddOrSubtract 后几分钟传正整数,前几分钟传负数
* @param formatEnum 格式
* @return 当前分钟的前几分钟/后几分钟的 对应 格式 日期
*/
private static String minusOrPlusMinutes(Long minutesToAddOrSubtract, FormatEnum formatEnum) {
return localDateTime().plusMinutes(minutesToAddOrSubtract).format(formatEnum.value);
}
/**
* 获取当前秒的前几秒/后几秒的日期
*
* @param secondsToAddOrSubtract 后几秒传正整数,前几秒传负数
* @param formatEnum 格式
* @return 当前秒的前几秒/后几秒的 对应 格式 日期
*/
private static String minusOrPlusSeconds(Long secondsToAddOrSubtract, FormatEnum formatEnum) {
return localDateTime().plusSeconds(secondsToAddOrSubtract).format(formatEnum.value);
}
/**
* 处理mysql timestamp 转JavaString 多个.0的问题
*/
private static String handlerStrDate(String dataTime){
return dataTime.substring(0, dataTime.length()-2);
}
}