java8 LocalDate、LocalTime、LocalDateTime和Date对比

一.LocalDate、LocalTime、LocalDateTime介绍

LocalDate、LocalTime、LocalDateTime是java8对日期、时间提供的新接口。实际使用中,计算日期就用LocalDate,计算日期加时刻用LocalDateTime,如果只有时刻就是LocalTime

  • 1获取当前时间的对象
LocalDateTime localDateTime = LocalDateTime.now();
Date date = new Date();

LocalDateTime相比Date更像是一个工具类,就是为了时间操作使用。其构造方法是私有的。

  • 2从字符串中解析
    字符串 2019-01-11 解析成时间对象
String str = "2019-01-11";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(str, formatter);

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
    Date date = simpleDateFormat.parse(str);
} catch (ParseException e) {
   e.printStackTrace();
}
  • 3 LocalDate比Date更强的初始化时间
    Date 设置某个日期,基本上3个方式,时间戳/Calendar/字符串解析。相对的LocalDate就简单了很多。
   LocalDate.of(2019,1,12);

LocalTime、LocalDateTime一样;

  • 4 更好的理解和操作方式
    1)Date、Calendar的操作,例如设置月份,day of week 都有些让人迷惑,例如1月的定义是0,周一是0。1号好像也是0;
    2)很多日期和时间操作,无非就是加减时间和比较,
    java8 LocalDate、LocalTime、LocalDateTime和Date对比_第1张图片
    LocalTime、LocalDateTime都提供了丰富的日期、时间操作方法。

二.LocalDate…较于Date的优越性。

  • 1.相对Date,Calendar,个人感觉最大的好处是对时间操作的学习成本很低,比Calendar低。
  • 2.localDate…系列相比Date更像是一个工具类,就是为了时间操作使用。是日期操作更加简单。
  • 3.线程安全性
    1)LocalDate…系列是线程安全的。.LocalDate…系列每一个属性字段都用了final关键字了,都变不了… 所以进行操作后都是返回新的copy对象。
    2)SimpleDateFormat的线程安全性;SimpleDateFormat线程不安全应该人尽皆知的,但依然有不安全的使用,但每次使用都new一个实例,当负载大的时候也不好。所以一个线程一个SimpleDateFormat实例应该可以的。而DateTimeFormatter是线程安全的。

最后
java8 对时间操作的类还有很多 到java.time包下去看看,以后总会用得到的地方。

Instant:时间戳
Duration:持续时间,时间差
LocalDate:只包含日期,比如:2016-10-20
LocalTime:只包含时间,比如:23:12:10
LocalDateTime:包含日期和时间,比如:2016-10-20 23:14:21
Period:时间段
ZoneOffset:时区偏移量,比如:+8:00
ZonedDateTime:带时区的时间
Clock:时钟,比如获取目前美国纽约的时间

你可能感兴趣的:(java工具)