参考资料

Java 本地日期时间:https://www.w3cschool.cn/java/java-local-date-time.html

易百:https://www.yiibai.com/javatime/javatime_localdate.html

LocalDate(本地日期)

LocalDate 类表示没有时间或时区的日期。

当时间和时区相关时使用LocalDate。

LocalDate 类包含两个常量,MAX和MIN。

MAX和MIN分别是最大和最小支持的LocalDate。

LocalDate.MAX为+ 999999999-12-31,LocalDate.MIN为-999999999-01-01。

LocalTime(本地时间)

LocalTime 类表示没有日期或时区的时间。

时间表示为纳秒精度。

LocalTime 类包含MIN,MAX,MIDNIGHT和NOON常量

MIN是00:00。 MAX是23:59:59.999999999。MIDNIGHT为00:00。NOON是12:00。

LocalDateTime(本地日期时间)

LocalDateTime 类表示没有时区的日期和时间。
LocalDateTime 是 LocalDate 和 LocalTime 的组合。

of方法

// LocalDate + LocalTime
LocalDateTime of = LocalDateTime.of(LocalDate.now(), LocalTime.now());
// 年 + 月 + 日 + 小时 + 分
LocalDateTime of1 = LocalDateTime.of(2019, 9, 28, 7, 42);
LocalDateTime of2 = LocalDateTime.of(2019, Month.SEPTEMBER, 28, 7, 42);
// 年 + 月 + 日 + 小时 + 分 + 秒
LocalDateTime of3 = LocalDateTime.of(2019, 9, 28, 7, 42, 32);
LocalDateTime of4 = LocalDateTime.of(2019, Month.SEPTEMBER, 28, 7, 42, 32);
// 年 + 月 + 日 + 小时 + 分 + 秒 + 纳秒
LocalDateTime of5 = LocalDateTime.of(2019, 9, 28, 7, 42, 32, 20);
LocalDateTime of6 = LocalDateTime.of(2019, Month.SEPTEMBER, 28, 7, 42, 32, 20);

ofxx系列(时区转换、使用时间戳转换LocalDateTime)

使用Instant转换  LocalDateTime ofInstant(Instant instant, ZoneId zone)

Instant now = Instant.now();
// 转换为东京时区
LocalDateTime localDateTime = LocalDateTime.ofInstant(now, ZoneId.of("Asia/Tokyo"));
// 转换为上海时区
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(now, ZoneId.of("Asia/Shanghai"));

LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset)

// Getting date from the base date i.e 01/01/1970  
LocalDateTime dateFromBase = LocalDateTime.ofEpochSecond(50, 0, ZoneOffset.UTC);

now方法

static LocalDateTime now()

static LocalDateTime now()

static LocalDateTime now(ZoneId zone)

// 使用系统默认时区
LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
// 使用指定时区
LocalDateTime now1 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
// 使用指定时区
LocalDateTime now2 = LocalDateTime.now(ZoneOffset.of("+8"));

static LocalDateTime now(Clock clock)

// 使用时钟类
LocalDateTime.now(Clock.systemDefaultZone());

 parse(转换字符串为LocalDateTime)和format(转换LocalDateTime为字符串)

LocalDateTime parse(CharSequence text)

LocalDateTime parse = LocalDateTime.parse("2007-12-03T10:15:30");
LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)
// yyyy-MM-dd HH:mm:ss
LocalDateTime parse = LocalDateTime.parse("2018-12-18 12:30:33", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// yyyy-MM-dd HH:mm
LocalDateTime parse1 = LocalDateTime.parse("2018-12-28 10:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));

public String format(DateTimeFormatter formatter)

LocalDateTime now = LocalDateTime.now();
        String format = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

外部转换(转换为其他时间日期类)

转为毫秒时间戳

LocalDateTime localDateTime = LocalDateTime.now();
// 转为毫秒时间戳
long time = Timestamp.valueOf(localDateTime).getTime();

toxxx方法(转换为其他时间日期类)

转为LocalDate LocalDate toLocalDate()
转为LocalTime LocalTime toLocalTime()
转为字符串时间 String toString()
转为时间戳 long toEpochSecond(ZoneOffset offset)
转为持续时间Instant Instant toInstant(ZoneOffset offset)

plusXxx(增加)系列

增加指定时间 LocalDateTime plus(TemporalAmount amountToAdd)
增加指定持续时间 LocalDateTime plus(long amountToAdd, TemporalUnit unit)
增加年 LocalDateTime plusYears(long years)
增加月 LocalDateTime plusMonths(long months)
增加周 LocalDateTime plusWeeks(long weeks)
增加天 LocalDateTime plusDays(long days)
增加小时 LocalDateTime plusHours(long hours)
增加分钟 LocalDateTime plusMinutes(long minutes)
增加秒 LocalDateTime plusSeconds(long seconds)
增加纳秒 LocalDateTime plusNanos(long nanos)

示例——增加指定时间

// 增加1秒
LocalDateTime dateTime = LocalDateTime.of(2018, 12, 22, 12, 12);
LocalDateTime plus = dateTime.plus(Duration.ofHours(1));

// 增加1天
LocalDateTime dateTime1 = LocalDateTime.of(2018, 12, 22, 12, 12);
LocalDateTime plus1 = dateTime1.plus(Period.ofDays(1));

示例——增加指定持续时间

LocalDateTime dateTime1 = LocalDateTime.of(2018, 12, 22, 12, 12);
dateTime1.plus(1, ChronoUnit.SECONDS);

示例——增加指定年数

LocalDateTime dateTime1 = LocalDateTime.of(2018, 12, 22, 12, 12);
// 增加10年
dateTime1.plusYears(10);

minusXxx(减少) 系列

使用方法参考增加系列

减少指定时间 LocalDateTime minus(TemporalAmount amountToAdd)
减少指定持续时间 LocalDateTime minus(long amountToSubtract, TemporalUnit unit)
减少年 LocalDateTime minusYears(long years)
减少月 LocalDateTime minusMonths(long months)
减少周 LocalDateTime minusWeeks(long weeks)
减少天 LocalDateTime minusDays(long days)
减少小时 LocalDateTime minusHours(long hours)
减少分钟 LocalDateTime minusMinutes(long minutes)
减少秒 LocalDateTime minusSeconds(long seconds)
减少纳秒 LocalDateTime minusNanos(long nanos)

 

withXxx(修改)系列

增加指定时间 LocalDateTime with(TemporalAdjuster adjuster)
按照指定时间修改 LocalDateTime with(TemporalField field, long newValue)
修改年 LocalDateTime withYear(int year)
修改月 LocalDateTime withMonth(int month)
修改一年中的月,范围是1到12 LocalDateTime withDayOfMonth(int dayOfMonth)
修改一年中的日,范围是1到28-31 LocalDateTime withDayOfYear(int dayOfYear)
修改小时,范围是0-23 LocalDateTime withHour(int hour)
修改分钟,范围是0-59 LocalDateTime withMinute(int minute)
修改秒,范围是0-59 LocalDateTime withSecond(int second)
修改纳秒,范围是0 到 999,999,999 LocalDateTime withNano(int nanoOfSecond)

示例——修改为指定时间

LocalDateTime dateTime1 = LocalDateTime.of(2018, 12, 22, 12, 12);
// 修改年部分
System.out.println(dateTime1.with(Year.now()));
// 修改月部分
System.out.println(dateTime1.with(Month.APRIL));
// 修改周部分
System.out.println(dateTime1.with(DayOfWeek.FRIDAY));
// 修改time部分
System.out.println(dateTime1.with(LocalTime.now()));
// 修改日期部分
System.out.println(dateTime1.with(LocalDate.now()));
// 修改全部日期和时间
System.out.println(dateTime1.with(LocalDateTime.now()));

示例——按照指定时间修改 

LocalDateTime dateTime1 = LocalDateTime.of(2018, 12, 22, 12, 12);
// 修改小时为 13
LocalDateTime with = dateTime1.with(ChronoField.HOUR_OF_DAY, 13);