点击上方 zhisheng ,选择“设为星标”
优质文章,及时送达
作者: 何甜甜在吗
来源: https://url.cn/5W566BD
通过阅读本篇文章你将了解到:
为什么需要 LocalDate
、 LocalTime
、 LocalDateTime
【java8新提供的类】
java8
新的时间 API
的使用方式,包括创建、格式化、解析、计算、修改
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
对象 => 较好的方法
Date
对时间处理比较麻烦,比如想获取某年、某月、某星期,以及 n
天以后的时间,如果用 Date
来处理的话真是太难了,你可能会说 Date
类不是有 getYear
、 getMonth
这些方法吗,获取年月日很 Easy
,但都被弃用了啊
只会获取年月日
创建 LocalDate
获取年、月、日、星期几
只会获取几点几分几秒
创建 LocalTime
获取时分秒
获取年月日时分秒,等于LocalDate+LocalTime
创建 LocalDateTime
获取 LocalDate
获取 LocalTime
获取秒数
创建 Instant
对象
获取秒数
获取毫秒数
个人觉得如果只是为了获取秒数或者毫秒数,使用 System.currentTimeMillis()
来得更为方便
LocalDate
、 LocalTime
、 LocalDateTime
、 Instant
为 不可变对象 ,修改这些对象对象会 返回一个副本
增加、减少年数、月数、天数等 以 LocalDateTime
为例
通过 with
修改某些值
还可以修改月、日
比如有些时候想知道这个月的最后一天是几号、下个周末是几号,通过提供的时间和日期API可以很快得到答案
比如通过 firstDayOfYear()
返回了当前日期的第一天日期,还有很多方法这里不在举例说明
DateTimeFormatter
默认提供了多种格式化方式,如果默认提供的不能满足要求,可以通过 DateTimeFormatter
的 ofPattern
方法创建自定义格式化方式
和 SimpleDateFormat
相比, DateTimeFormatter
是线程安全的
LocalDateTime
: Date
有的我都有, Date
没有的我也有,日期选择请 PickMe
SpringBoot中应用LocalDateTime
将LocalDateTime字段以时间戳的方式返回给前端 添加日期转化类
并在 LocalDateTime
字段上添加 @JsonSerialize(using=LocalDateTimeConverter.class)
注解,如下:
将LocalDateTime字段以指定格式化日期的方式返回给前端 在 LocalDateTime
字段上添加 @JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd HH:mm:ss")
注解即可,如下:
对前端传入的日期进行格式化 在 LocalDateTime
字段上添加 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
注解即可,如下:
如果觉得文章对你有帮助, 请转发朋友圈、点在看 ,让更多人获益,感谢您的支持!
END
关注我
公众号 ( zhisheng ) 里回复 面经、 ES、 Flink、 Spring、 Java、 Kafka、 监控 等关键字 可以查看更多关键字对应的文章。
好文章,我 在看 :heart: