SimpleDateFormat线程不安全

遇到的问题:

项目中设置了静态全局的SimpleDateFormat时间转换的格式,线上在并发使用的时候,出现了时间数据转换混乱的情况

原因:

SimpleDateFormat中,SimpleDateFormat类中定义的Calendar是共享的,并发设值的时候承载的对象可能会被替换,造成转换的数据混乱,如下图所示
原因

解决方法:

试过使用ThreadLocal去构造SimpleDateFormat对象还是没能解决,最终使用了线程安全的DateTimeFormatter进行替换 

DateTimeFormatter用法

1
2
3
4
5
6
7
8
9
10
11
12
时间戳转日期字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(System.currentTimeMillis() / 1000L, 0, ZoneOffset.ofHours(8)); 
String format = localDateTime.format(formatter); 
日期时间字符串转时间戳
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
LocalDateTime localDateTime = LocalDateTime.parse("2020-09-03 10:20:11", formatter); 
long l = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); 
日期字符串转时间戳 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); 
LocalDate localDate = LocalDate.parse("2020/09/03", formatter); 
long l = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();

此文章为本人在CSDN原创文章,迁移到个人博客