LocalDateTime 和 Date 的比较与区别

通过本篇文章了解
为什么需要LocalDate、LocalTime、LocalDateTime【java8新提供的类】
java8新的时间API的使用方式,包括创建、格式化、解析、计算、修改
为什么需要LocalDate、LocalTime、LocalDateTime
Date如果不格式化,打印出的日期可读性差,如下
所以我们经常会使用到格式化时间类 SimpleDateFormat,但SimpleDateFormat是线程不安全的 SimpleDateFormat的format方法最终调用代码:
calendar是共享变量,并且这个共享变量没有做线程安全控制。当多个线程同时使用相同的SimpleDateFormat对象【如用static修饰的SimpleDateFormat】调用format方法时,多个线程会同时调用calendar.setTime方法,可能一个线程刚设置好time值另外的一个线程马上把设置的time值给修改了导致返回的格式化时间可能是错误的。
在多并发情况下使用SimpleDateFormat需格外注意SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。parse方法实际调用alb.establish(calendar).getTime()方法来解析,alb.establish(calendar)方法里主要完成了
- 重置日期对象cal的属性值 
- 使用calb中中属性设置cal 
- 返回设置好的cal对象 
但是这三步不是原子操作
多线程并发如何保证线程安全
- 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat对象 => 创建和销毁对象的开销大 
- 对使用format和parse方法的地方进行加锁 => 线程阻塞性能差 
- 使用ThreadLocal保证每个线程最多只创建一次SimpleDateFormat对象 => 较好的方法 
一起使用java8全新的日期和时间API
创建LocalDate 只获取某年某月
获取年、月、日、星期几
获取时分秒
LocalDateTime
获取年月日时分秒,等于LocalDate+LocalTime
创建LocalDateTime
为什么推荐大家学习新的时间API
- 其中还有一些没接受的对时间操作的api,相比旧的api简单了许多 
- 和SimpleDateFormat相比,DateTimeFormatter是线程安全的 
祝大家每天进步有点,钱程似锦,觉得有帮助的点点关注












 
    
评论