Java8之前,日期时间:java.util.Date是可变类型,SimpleDateFormat非线程安全
旧版的 Java 中日期时间 API 问题:
-
非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的。
-
设计很差 − Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。
-
时区处理麻烦 − 日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题。
Java8 日期时间 API 在 java.time 包中:
-
Local(本地) − 简化了日期时间的处理,没有时区的问题。
-
Zoned(时区) − 通过制定的时区处理日期时间。
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
java.time包中的类
类名 | 说明 |
---|---|
Instant | 时间戳 |
Duration | 持续时间、时间差 |
LocalDate | 只包含日期,比如:2018-09-24 |
LocalTime | 只包含时间,比如:10:32:10 |
LocalDateTime | 包含日期和时间,比如:2018-09-24 10:32:10 |
Peroid | 时间段 |
ZoneOffset | 时区偏移量,比如:+8:00 |
ZonedDateTime | 带时区的日期时间 |
Clock | 时钟,可用于获取当前时间戳 |
java.time.format.DateTimeFormatter | 时间格式化类 |
LocalDate常用方法总结
方法名 | 返回值类型 | 备注 |
getYear() | int | 获取当前日期的年份 |
getMonth() | Month | 获取当前日期的月份对象 |
getMonthValue() | int | 获取当前日期是第几月 |
getDayOfWeek() | DayOfWeek | 表示该对象表示的日期是星期几 |
getDayOfMonth() | int | 表示该对象表示的日期是这个月第几天 |
getDayOfYear() | int | 表示该对象表示的日期是今年第几天 |
withYear(int year) | LocalDate | 修改当前对象的年份 |
withMonth(int month) | LocalDate | 修改当前对象的月份 |
withDayOfMonth(intdayOfMonth) | LocalDate | 修改当前对象在当月的日期 |
isLeapYear() | boolean | 是否是闰年 |
lengthOfMonth() | int | 这个月有多少天 |
lengthOfYear() | int | 该对象表示的年份有多少天(365或者366) |
plusYears(longyearsToAdd) | LocalDate | 当前对象增加指定的年份数 |
plusMonths(longmonthsToAdd) | LocalDate | 当前对象增加指定的月份数 |
plusWeeks(longweeksToAdd) | LocalDate | 当前对象增加指定的周数 |
plusDays(longdaysToAdd) | LocalDate | 当前对象增加指定的天数 |
minusYears(longyearsToSubtract) | LocalDate | 当前对象减去指定的年数 |
minusMonths(longmonthsToSubtract) | LocalDate | 当前对象减去注定的月数 |
minusWeeks(longweeksToSubtract) | LocalDate | 当前对象减去指定的周数 |
minusDays(longdaysToSubtract) | LocalDate | 当前对象减去指定的天数 |
compareTo(ChronoLocalDateother) | int | 比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚, |
isBefore(ChronoLocalDateother) | boolean | 比较当前对象日期是否在other对象日期之前 |
isAfter(ChronoLocalDateother) | boolean | 比较当前对象日期是否在other对象日期之后 |
isEqual(ChronoLocalDateother) | boolean | 比较两个日期对象是否相等 |
实例
java">//获取当天的日期 today = 2022-12-16
LocalDate today = LocalDate.now();
//获取当前的年月日
int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
//获取某个特定的日期 2022-12-02
LocalDate dateOfBirth = LocalDate.of(2022, 12, 02);
//获取当前时间 localTime = 21:00:22.404
LocalTime localTime = LocalTime.now();
//增加时间的小时
LocalTime two = localTime.plusHours(2);
//获取1周后的日期
LocalDate oneToday = today.plus(1, ChronoUnit.WEEKS);
//一年前后的日期
LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
//一年前的日期
LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);
比较两个日期
LocalDate类中使用isBefore()、isAfter()、equals()方法来比较两个日期。
表示固定的日期 YearMonth
LengthOfMonth()这个方法返回的是这个YearMonth实例有多少天
java">/**
* 如何表示固定的日期
*/
YearMonth currentYearMonth = YearMonth.now();
System.out.printf("这个月的年月 %s 有 %d 天 %n", currentYearMonth, currentYearMonth.lengthOfMonth());
YearMonth creditCardExpiry = YearMonth.of(2018, Month.JULY);
System.out.printf("你输入的年月是 %s %n", creditCardExpiry);
// 这个月的年月 2020-02 有 29 天
// 你输入的年月是 2018-07
两个日期之差
java">/**
* 两个日期之间包含多少天,多少月
*/
LocalDate today = LocalDate.now();
LocalDate dates = LocalDate.of(2016, Month.MARCH, 14);
Period periodToNextJavaRelease = Period.between(today, dates);
System.out.printf("日期 %s 和日期 %s 相差 %s 月", today, dates, periodToNextJavaRelease.getMonths());
// 日期 2020-02-06 和日期 2016-03-14 相差 -10 月
日期格式化与转换
可以给DateTimeFormatter的ofPattern静态方法()传入任何的模式,它会返回一个实例。比如M代表月,m仍代表分,无效的模式会抛异常DateTimeParseException。LocalDate.format()方法会返回一个代表当前日期的字符串,对应的模式就是传入的DateTimeFormatter实例中定义好的。
java">String str= "12/16/2022";
LocalDateTime now = LocalDateTime.now();
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate local= LocalDate.parse(str, formatter);
System.out.printf("字符 %s 转换成功后的日期是 %s%n", str, local);
// 字符 02 06 2020 转换成功后的日期是 2020-02-06
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String date = arrivalDate.format(formatter1);
System.out.printf("时间日期 %s 转换后的字符是 %s %n", now, date);
// 时间日期 2022-12-16T22:14:00.380 转换后的字符是 2022-12-16 22:14:00
} catch (DateTimeParseException e) {
e.printStackTrace();
}
Date和LocalDateTime、LocalDate互转
java">/**
* LocalDateTime -> Date
*/
public static Date toDate(LocalDateTime localDateTime) {
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
return Date.from(zdt.toInstant());
}
/**
* Date -> LocalDateTime
*/
public static LocalDateTime toLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return instant.atZone(zoneId).toLocalDateTime();
}
/**
* Date -> LocalDateTime
*/
public static LocalDateTime toLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return instant.atZone(zoneId).toLocalDateTime();
}
/**
* LocalDate -> Date
*/
public static Date toDate(LocalDate localDate) {
ZoneId defaultZoneId = ZoneId.systemDefault();
return Date.from(localDate.atStartOfDay(defaultZoneId).toInstant());
}
基于JDK 1.8的时间工具类
java">import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class DateUtil {
private static final String HYPHEN = "-";
private static final String COLON = ":";
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间格式 DateTimeFormatter (Java8) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
enum FormatEnum {
/**
* 返回 DateTimeFormatter "yyyy-MM-dd HH:mm:ss" 时间格式
*/
FORMAT_DATA_TIME(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT)),
/**
* 返回 DateTimeFormatter "yyyyMMddHHmmss"的时间格式
*/
FORMAT_DATA_TIME_NO_SYMBOL(DateTimeFormatter.ofPattern(DATETIME_FORMAT)),
/**
* 返回 DateTimeFormatter "yyyy-MM-dd"的时间格式
*/
FORMAT_DATE(DateTimeFormatter.ofPattern(DATE_FORMAT)),
/**
* 返回 DateTimeFormatter "HH:mm:ss"的时间格式
*/
FORMAT_TIME(DateTimeFormatter.ofPattern(TIME_FORMAT));
private DateTimeFormatter value;
FormatEnum(DateTimeFormatter format) {
this.value = format;
}
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间格式 DateTimeFormatter (Java8) ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间格式 字符串 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 年的时间格式
* 返回 "yyyy" 字符串
*/
public static final String YEAR_FORMAT = "yyyy";
/**
* 月的时间格式
* 返回 "MM" 字符串
*/
public static final String MONTH_FORMAT = "MM";
/**
* 日的时间格式
* 返回 "dd" 字符串
*/
public static final String DAY_FORMAT = "dd";
/**
* 时的时间格式
* 返回 "HH" 字符串
*/
public static final String HOUR_FORMAT = "HH";
/**
* 分的时间格式
* 返回 "mm" 字符串
*/
public static final String MINUTE_FORMAT = "mm";
/**
* 秒的时间格式
* 返回 "ss" 字符串
*/
public static final String SECOND_FORMAT = "ss";
/**
* <span color='red'>年-月-日</span>的时间格式
* 返回 "yyyy-MM-dd" 字符串
*/
public static final String DATE_FORMAT = YEAR_FORMAT + HYPHEN + MONTH_FORMAT + HYPHEN + DAY_FORMAT;
/**
* <span color='red'>时:分:秒</span>的时间格式
* 返回 "HH:mm:ss" 字符串
*/
public static final String TIME_FORMAT = HOUR_FORMAT + COLON + MINUTE_FORMAT + COLON + SECOND_FORMAT;
/**
* <span color='red'>年-月-日 时:分:秒</span>的时间格式
* 返回 "yyyy-MM-dd HH:mm:ss" 字符串
*/
public static final String DATE_TIME_FORMAT = DATE_FORMAT + " " + TIME_FORMAT;
/**
* <span color='red'>年月日时分秒</span>的时间格式(无符号)
* 返回 "yyyyMMddHHmmss" 字符串
*/
public static final String DATETIME_FORMAT = YEAR_FORMAT + MONTH_FORMAT + DAY_FORMAT + HOUR_FORMAT + MINUTE_FORMAT + SECOND_FORMAT;
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间格式 字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间戳 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取秒级时间戳
*/
public static Long epochSecond() {
return localDateTime().toEpochSecond(ZoneOffset.of("+8"));
}
/**
* 获取毫秒级时间戳
*/
public static Long epochMilli() {
return localDateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间戳 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 当前时间相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取当前详细时间,like 2022-12-15 17:20:06
*/
public static String dateTime() {
return localDateTime().format(FormatEnum.FORMAT_DATA_TIME.value);
}
/**
* 获取当前详细时间,like 202212172006
*/
public static String dateTimeNoSymbol() {
return localDateTime().format(FormatEnum.FORMAT_DATA_TIME_NO_SYMBOL.value);
}
/**
* 获取当前日期,like 2022-12-16
*/
public static String date() {
return localDate() + "";
}
/**
* 获取当前时间,like 17:20:06
*/
public static String time() {
return localTime().format(FormatEnum.FORMAT_TIME.value);
}
/**
* 获取当前年
*/
public static Integer year() {
return localDate().getYear();
}
/**
* 获取当前月
*/
public static int month() {
return localDate().getMonthValue();
}
/**
* 获取当前年中的日
*/
public static Integer dayOfYear() {
return localDate().getDayOfYear();
}
/**
* 获取当前月中的日
*/
public static Integer dayOfMonth() {
return localDate().getDayOfMonth();
}
/**
* 获取当前星期中的日
*/
public static Integer dayOfWeek() {
return localDate().getDayOfWeek().getValue();
}
/**
* 获取当前小时
*/
public static Integer hour() {
return localTime().getHour();
}
/**
* 获取当前分钟
*/
public static Integer minute() {
return localTime().getMinute();
}
/**
* 获取当前秒
*/
public static Integer second() {
return localTime().getSecond();
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 当前时间相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 未来、历史时间相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取当前年的 前几年 的日期
* @param years 前几年 正整数
* @param formatEnum 格式
* @return 当前年的 前几年 的 对应 格式 日期
*/
public static String minusYears(Long years, FormatEnum formatEnum) {
return minusOrPlusYears(-years, formatEnum);
}
/**
* 获取当前年的 后几年 的日期
* @param years 后几年 正整数
* @param formatEnum 格式
* @return 当前年的 后几年 的 对应 格式 日期
*/
public static String plusYears(Long years, FormatEnum formatEnum) {
return minusOrPlusYears(years, formatEnum);
}
/**
* 获取当前月的 前几月 日期
* @param months 前几月 正整数
* @param formatEnum 格式
* @return 当前月的 前几月 的 对应 格式 日期
*/
public static String minusMonths(Long months, FormatEnum formatEnum) {
return minusOrPlusMonths(-months, formatEnum);
}
/**
* 获取当前月的 后几月 的日期
* @param months 后几月 正整数
* @param formatEnum 格式
* @return 当前月的 后几月 的 对应 格式 日期
*/
public static String plusMonths(Long months, FormatEnum formatEnum) {
return minusOrPlusMonths(months, formatEnum);
}
/**
* 获取当前日的 前几日 的日期
* @param days 前几日 正整数
* @param formatEnum 格式
* @return 当前日的 前几日 的 对应 格式 日期
*/
public static String minusDays(Long days, FormatEnum formatEnum) {
return minusOrPlusDays(-days, formatEnum);
}
/**
* 获取当前日的 后几日 的日期
* @param days 后几日 正整数
* @param formatEnum 格式
* @return 当前日的 后几日 的 对应 格式 日期
*/
public static String plusDays(Long days, FormatEnum formatEnum) {
return minusOrPlusDays(days, formatEnum);
}
/**
* 获取当前星期的 前几星期 的日期
* @param weeks 前几星期 正整数
* @param formatEnum 格式
* @return 当前星期的 前几星期 的 对应 格式 日期
*/
public static String minusWeeks(Long weeks, FormatEnum formatEnum) {
return minusOrPlusWeeks(-weeks, formatEnum);
}
/**
* 获取当前星期的 后几星期 的日期
* @param weeks 后几星期 正整数
* @param formatEnum 格式
* @return 当前星期的 后几星期 的 对应 格式 日期
*/
public static String plusWeeks(Long weeks, FormatEnum formatEnum) {
return minusOrPlusWeeks(weeks, formatEnum);
}
/**
* 获取当前小时的 前几小时 的日期
* @param hours 前几小时 正整数
* @param formatEnum 格式
* @return 当前小时的 前几小时 的 对应 格式 日期
*/
public static String minusHours(Long hours, FormatEnum formatEnum) {
return minusOrPlusHours(-hours, formatEnum);
}
/**
* 获取当前小时的 后几小时 的日期
* @param hours 后几小时 正整数
* @param formatEnum 格式
* @return 当前小时的 后几小时 的 对应 格式 日期
*/
public static String plusHours(Long hours, FormatEnum formatEnum) {
return minusOrPlusHours(hours, formatEnum);
}
/**
* 获取当前分钟的 前几分钟 的日期
* @param minutes 前几分钟 正整数
* @param formatEnum 格式
* @return 当前分钟的 前几分钟 的 对应 格式 日期
*/
public static String minusMinutes(Long minutes, FormatEnum formatEnum) {
return minusOrPlusMinutes(-minutes, formatEnum);
}
/**
* 获取当前分钟的 后几分钟 的日期
* @param minutes 后几分钟 正整数
* @param formatEnum 格式
* @return 当前分钟的 后几分钟 的 对应 格式 日期
*/
public static String plusMinutes(Long minutes, FormatEnum formatEnum) {
return minusOrPlusMinutes(minutes, formatEnum);
}
/**
* 获取当前秒的 前几秒 的日期
* @param seconds 前几秒 正整数
* @param formatEnum 格式
* @return 当前秒的 前几秒 的 对应 格式 日期
*/
public static String minusSeconds(Long seconds, FormatEnum formatEnum) {
return minusOrPlusSeconds(-seconds, formatEnum);
}
/**
* 获取当前秒的 前几秒/后几秒 的日期
* @param seconds 后几秒 正整数
* @param formatEnum 格式
* @return 当前秒的 后几秒 的 对应 格式 日期
*/
public static String plusSeconds(Long seconds, FormatEnum formatEnum) {
return minusOrPlusSeconds(seconds, formatEnum);
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 未来、历史时间相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间转换相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* Date类型转LocalDateTime
* @param date date类型时间
* @return LocalDateTime
*/
public static LocalDateTime toLocalDateTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}
/**
* Date类型转LocalDate
* @param date date类型时间
* @return LocalDate
*/
public static LocalDate toLocalDate(Date date) {
return toLocalDateTime(date).toLocalDate();
}
/**
* Date类型转LocalTime
* @param date date类型时间
* @return LocalTime
*/
public static LocalTime toLocalTime(Date date) {
return toLocalDateTime(date).toLocalTime();
}
/**
* LocalDateTime 类型转 Date
* @param localDateTime
* @return 转换后的Date类型日期
*/
public static Date toDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* LocalDate类型转Date
* @param localDate
* @return 转换后的Date类型日期
*/
public static Date toDate(LocalDate localDate) {
return toDate(localDate.atStartOfDay());
}
/**
* LocalTime类型转Date
* @param localTime
* @return 转换后的Date类型日期
*/
public static Date toDate(LocalTime localTime) {
return toDate(LocalDateTime.of(localDate(), localTime));
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间转换相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 时间间隔相关 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取 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(LocalDateTime.parse(endDate, FormatEnum.FORMAT_DATA_TIME.value).toLocalDate(),
LocalDateTime.parse(startDate, FormatEnum.FORMAT_DATA_TIME.value).toLocalDate());
}
/**
* 获取 endDate-startDate 时间间隔天数
* @param startDate 开始时间
* @param endDate 结束时间
* @return 时间间隔天数
*/
public static Long daysInterval(LocalDateTime startDate, LocalDateTime endDate) {
return daysInterval(startDate.toLocalDate(), endDate.toLocalDate());
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 时间间隔相关 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
/*↓↓↓只允许此类调用↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
/**
* 获取 当前年 的前几年/后几年的日期
* @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);
}
/**
* 获取 LocalDate
*/
private static LocalDate localDate() {
return localDateTime().toLocalDate();
}
/**
* 获取 LocalTime
*/
private static LocalTime localTime() {
return localDateTime().toLocalTime();
}
/**
* 获取 LocalDateTime
*/
private static LocalDateTime localDateTime() {
return LocalDateTime.now();
}
}