一.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)很多日期和时间操作,无非就是加减时间和比较,
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:时钟,比如获取目前美国纽约的时间