Data-time类

###常用类概述###

  • Instant类
    • Instant类对时间轴上的单一瞬时点建模,可以用于记录应用程序中的事件时间戳,在之后学习的类型转换中,均可以使用Instant类作为中间类完成转换
  • Duration类
    • Duration类表示秒或纳秒时间间隔,适合处理较短的时间,需要更高的精确性
  • Period类
    • 表示一段时间的年、月、日
  • LocalDate类
    • 是个不可变的时间日期对象,表是日期,通常被视为年月日
  • LocalTime类
    • 是个不可变的时间日期对象,代表一个时间,通常被看作是小时、秒,时间表示为纳秒精度
  • LocalDateTime类
    • 是一个不可变的日期时间对象,代表日期时间,通常被认为年月日时分秒
  • ZoneDateTime类
    • 是具有失去的日期时间的不可变表示,此类存储所有时间和日期字段,精度为纳秒,时区为区域偏移量,用于处理模糊的本地日期时间

###now方法在日期/时间类的使用###

Date-Time API中的所有类均生成不可变实例,它们是线程安全的,并且这些类不提供公共构造函数,也就是说没办法通过new的方式直接创建,需要采用工厂方法加以实例化
now方法可以根据当前日期或时间创建实例,除上述几个类外,Year、YearMonth、MonthDay也可以使用now方法

###根据现有实例创建日期与时间对象###

Java8中日期时间相关的API中的所有实例都是不可改变的, 一旦创建
LocalDate, LocalTime , LocalDateTime就无法修改他们(类似于String) ,这对于线程安全非常有利.

  • puls方法可在原有时间基础上加上一段时间

    LocalDateTime now = LocalDateTime.now();//在原有时间基础上增加1年2个月24天
    System.out.println(now.plus(Period.of(1, 2, 24)));

  • minus方法可在原有时间基础上减去一段时间

###with方法在LocalDateTime类的应用###

with方法可以直接修改日期的值

1
2
3
4
LocalDateTime now = LocalDateTime.now();
System.out.println(now.withYear(2021));//直接修改年为指定值
System.out.println(now.with(TemporalAdjusters.lastDayOfMonth()));//本月最后一天
System.out.println(now.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)));//将时间修改为下一个周五