本文记录下LocalDate和LocalDateTime对日期的常用方法,日期的加减,两个日期时间的时间差,自定义时间格式formatter实现日期和String的相互转换
注意until的两种写法计算不同的时间差值,详情可看如下注释和例子说明
package com.ssh.mydmx.common;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
@Slf4j
public class LocalDateTest {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
//取当前时间
LocalDate nowDate = LocalDate.now();
LocalDateTime nowDataTime = LocalDateTime.now();
//加30天
LocalDate nowDatePlus30 = nowDate.plusDays(30L);
LocalDateTime nowDateTimePlus30 = nowDataTime.plusDays(30L);
//减5天
LocalDate nowDateMinus5 = nowDate.minusDays(5L);
LocalDateTime nowDateTimeMinus5 = nowDataTime.minusDays(5L);
//定义formatter 也可选择根据自己需要格式,选择使用DateTimeFormatter里定义好的formatter
//String---------->localDate
LocalDate parseNowStr = LocalDate.parse("2021-12-31", FORMATTER);
//localDate----->String
log.info("localDate----->String={}",parseNowStr.format(FORMATTER));
log.info("localDate----->String={}",nowDataTime.format(DATE_TIME_FORMATTER));
//取两个时间差,实际天数差 例如date1-2022-01-30,date2=2021-12-26 时间差====35
log.info("取时间差===={}",nowDateTimeMinus5.until(nowDateTimePlus30, ChronoUnit.DAYS));
log.info("取时间差===={}",nowDateMinus5.until(nowDatePlus30,ChronoUnit.DAYS));
//取两个时间差,只看日期 例如date1-2022-01-30,date2=2021-12-26 时间差====4
int days = nowDateMinus5.until(nowDatePlus30).getDays();
log.info("date1-{},date2={}取时间差===={}",nowDatePlus30.format(FORMATTER),nowDateMinus5.format(FORMATTER),days);
//不足24小时不算一天 2021-12-30 15:51:29和2021-12-31 15:50:29 相差天数=0
//同理不足一分钟也不算 比如6.4分钟算6分钟
LocalDateTime demo1 = LocalDateTime.parse("2021-12-31 15:50:29", DATE_TIME_FORMATTER);
LocalDateTime demo2 = LocalDateTime.parse("2021-12-30 15:51:29", DATE_TIME_FORMATTER);
log.info("相差天数={}=分钟={}",demo2.until(demo1,ChronoUnit.DAYS),demo2.until(demo1,ChronoUnit.MINUTES));
}
}