设计更合理,功能更丰富,使用更方便,都是不可变的对象,修改后会返回新的事件对象不会丢失最开始的时间,线程安全,能精确到毫秒、纳秒。
这三个类都有一个静态方法now():获取系统当前时间对应的该对象:
1. LocalDate:代表本地日期
加就是plusYears、plusMonths。。。以此类推
减就是minusYears、minusMonths。。。以此类推
LocalDate ld = LocalDate.of(year,month,dayOfMonth); 获取指定日期的LocalDate对象
判断2个日期对象是否相等,在前还是在后:equals() isBefore() isAfter()
2. LocalTime:代表本地时间
也有比较相等和在前在后,用法相同
3. LocalDateTime:代表本地日期、时间
可以把LocalDate转换成上面两个对象
LocalDate ld = ldt.toLocalDate();
LocalTime lt = ldt.toLocalTime();
4.ZoneId:获取时区ID
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Test {
public static void main(String[] args) {
//世界标准时间(UTC)中国标准时间:+8
ZoneId z = ZoneId.systemDefault(); //获取系统默认的时区
System.out.println(z.getId());
//获取Java支持的全部时区ID
System.out.println(ZoneId.getAvailableZoneIds());
//ZonedDateTime
ZoneId zoneId1 = ZoneId.of("America/New_York");
ZonedDateTime now = ZonedDateTime.now(zoneId1);
System.out.println(now);
//获得世界标准时间
System.out.println(ZonedDateTime.now(Clock.systemUTC())); //如果不传参数就是系统默认时间
}
}
5.Instant 时间线上的某个时刻/时间戳
通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成,总秒数和纳秒数
Instant对象的作用:性能分析或记录操作时间表
6.DateTimeFormatter:格式化器,用于时间的格式化和解析,线程安全
格式化时间还有另一种方法:可以用 LocalDateTime对象.format(格式化器)
//解析时间:解析时间一般使用LocalDateTime提供的解析方法来解析
String dateStr = "2029年12月12日 12:12:11";
System.out.println(LocalDateTime.parse(dateStr, df)); //第一个参数String 第二个参数解析器
7.Period(一段时期)
可以用于计算来年各个LocalDate对象相差的年数、月数、天数
import java.time.LocalDate;
import java.time.Period;
public class Test2 {
public static void main(String[] args) {
LocalDate a1 = LocalDate.of(2029,8,1);
LocalDate a2 = LocalDate.of(2023,8,9);
//1.创建Period对象,封装两个日期对象
Period p =Period.between(a1,a2);
System.out.println(p.getYears()); // -5
System.out.println(p.getMonths()); // -11
System.out.println(p.getDays()); // -23
}
}
8、Duration(持续时间)
可以用于计算两个时间对象相差的天数、小时数、分数、秒数