简单记录下LocalDateTime常见用法
1.获取系统当前时间(转换格式)
(1)返回String类型时间格式(yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,yyyy-MM-dd HH:mm等)
LocalDateTime.now().format(DateTimeFormatter.ofPattern ("yyyy-MM-dd HH:mm:ss"));
(2)获取当前系统时间戳,返回Long类型
LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
2.获取系统当前日期前/后时间
(1)获取当前日期前10秒、10分钟、10天等
pattern = "yyyy-MM-dd HH:mm:ss"
LocalDateTime.now().plusSeconds(-10).format(DateTimeFormatter.ofPattern(pattern));
LocalDateTime.now().plusMinutes(-10).format(DateTimeFormatter.ofPattern(pattern));
LocalDateTime.now().plusDay(-10).format(DateTimeFormatter.ofPattern(pattern));
获取当前日期后10秒、10分钟、10天等只需把时间改成正数。LocalDateTime方法还包括plusHours、plusWeeks、plusMonths、plusYears等。
(2)单独使用plus()
LocalDateTime plus(TemporalAmount amountToAdd)
//直接使用默认年月日三个参数(int类型),正整数代表当前日期之后,负整数代表当前日期之后
LocalDateTime.now().plus(Period.of(年,月,日)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime plus(long amountToAdd,TemporalUnit unit)
//同上
LocalDateTime.now().plus(10, ChronoUnit.YEARS).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
3.格式转换
//2022-06-28T01:53:41.000+00:00 转换成 yyyy-MM-dd HH:mm:ss格式
String localDate = LocalDateTime
.parse("2022-06-28T01:53:41.000+00:00",DateTimeFormatter.ISO_OFFSET_DATE_TIME)
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//2022-06-25T00:00:00 转换成 yyyy-MM-dd格式
String date = LocalDateTime
.parse("2022-06-25T00:00:00", DateTimeFormatter.ISO_DATE_TIME)
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
//注:其他格式转换类似
//时间戳转日期
Date date = new Date(Long.parseLong("1657508223"));
LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault())
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
//日期转时间戳
//yyyy-MM-dd格式转时间戳
LocalDate localDate = LocalDate.parse("2022-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDateTime localDateTime = localDate.atStartOfDay();
Long time = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
//yyyy-MM-dd HH:mm:ss格式转时间戳
LocalDateTime localDate = LocalDateTime
.parse("2022-01-01 10:09:09", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Long time = localDate.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
4.日期比较
先将字符串转化成LocalDateTime,然后直接调用isAfter()或isBefore()方法。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime date1 = LocalDateTime.parse("2022-01-01 10:09:09", dtf);
LocalDateTime date2 = LocalDateTime.parse("2022-01-01 11:09:09", dtf);
//返回true
date1.isBefore(date2);
//返回false
date1.isAfter(date2)
5.其他方法,获取当前日期年、月、日、当前日期季度第一天,当前日期季度最后一天等
//获取当前日期年份
int year = LocalDate.now().getYear();
//获取当前日期月份 直接调用getMonth()方法获取的是英文月份
int month = LocalDate.now().getMonthValue();
//获取当前日期日
int day = LocalDate.now().getDayOfMonth();
//获取当前季度第一天
Month month = Month.of(now.getMonth().firstMonthOfQuarter().getValue());
LocalDateTime ldt = LocalDateTime.of(LocalDate.of(now.getYear(), month, 1), LocalTime.MIN);
//获取当前季度最后一天
Month month2 = Month.of(now.getMonth().firstMonthOfQuarter().getValue()).plus(2L);
LocalDateTime ldt2 = LocalDateTime.of(LocalDate.of(now.getYear(), month2, month2.length(now.isLeapYear())), LocalTime.MAX);