码迷,mamicode.com
首页 > 其他好文 > 详细

SimpleDateFormat格式化时间的安全问题解决方法

时间:2017-09-02 19:11:51      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:cal   off   结果   print   str   led   format   value   table   

问题:

SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。

解决方法:

[正例]:

1.注意线程安全,使用DateUtils。

2.亦推荐如下处理:

 1 private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {      
 2 
 3  @Override       
 4 
 5 protected DateFormat initialValue() {           
 6 
 7 return new SimpleDateFormat("yyyy-MM-dd");       
 8 
 9 }   
10 
11 };   

3.说明:如果是JDK8的应用,可以使用Instant代替DateLocalDateTime代替CalendarDateTimeFormatter代替Simpledateformatter,官方给出的解释:simple beautiful strong immutable thread-safe

[正例]

System.out.println(LocalDate.of(2017, 6, 7));

System.out.println(LocalTime.of(3, 20, 15));

System.out.println(LocalDateTime.of(2017, 6, 7,3, 20, 15));

System.out.println(Instant.now().atOffset(ZoneOffset.ofHours(8)));

返回结果:

2017-06-07

03:20:15

2017-06-07T03:20:15

2017-06-07T11:37:15.815+08:00

有篇文章分析的不错http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html

SimpleDateFormat格式化时间的安全问题解决方法

标签:cal   off   结果   print   str   led   format   value   table   

原文地址:http://www.cnblogs.com/zhima-hu/p/7467210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!