建议FastDateFormat来代替JDK自带的DateFormat

来源:http://blog.sina.com.cn/s/blog_733d71ec0100p2qx.html


Java代码 
  1. public static final FastDateFormat ISO_DATE_FORMAT  
  2.            = FastDateFormat.getInstance("yyyy-MM-dd");  


上面的final 字段代表一个不可变的FastDateFormat,然而要让FastDateFormat字段真正的不可变,FastDateFormat内部必须遵循相应的规则才可以。 

不要提供能修改对象状态的方法 确保类不会被继承 
让所有字段都成为static final字段 
确保所有可变的组件不能被访问 

其实DateFormateUtils内部细节实现完全依靠FastDateFormat
FastDateFormat这个类编写比较复杂,它有自己的一套解析规则,同时又使用了DateFormat类的一些规则,如Pattern。与SimpleDateFormat不同,FastDateFormat是线程安全,所以这个类在多线程的服务环境中特别有用。虽然它们都继承自java.text.Format,其实FastDateFormat相当于DateFormat与SimpleDateFormat的合并,只是功能更强大而已。

http://borball.javaeye.com/blog/207374

格式化日期
问题提出:SimpleDateFormat是非线程安全的,而您又需要一个ISO格式的日期。
解决方法:使用FastDateFormat或者使用DateFormatUtils提供的静态FastDateFormat实例,它提供了一些格式化日期的线程安全的方法。
使用举例:

    Date now = new Date();
     String isoDT 
= DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(now);
     System.out.println(
"It is currently: " + isoDT);
结果为It is currently: 2006-03-08T10:44:29+08:00
如果您想使用传统的格式化类型,可以用
FastDateFormat来代替SimpleDateFormat,
// create a formatter that simply prints the year and month

FastDateFormat formatter 
= 
    
new FastDateFormat( "yyyy-mm"
,
                         TimeZone.getDefault( ),
                         Locale.getDefault( ) );

String output 
= formatter.format( new
 Date( ) );

System.out.println(output);
在最新的版本中FastDateFormat的构造函数已经改为protected,统一使用getInstance()来获取FastDateFormat实例,上述的输出为2006-03.
Discussion:In fact, you should be aware that none of the Sun formatting classes are thread-safe.
  以下是DateFormatUtils里面提供的Static date/time formats。

Name

Format

ISO_DATE_FORMAT

yyyy-MM-dd"2004-01-02"

ISO_DATE_TIME_ZONE_FORMAT

yyyy-MM-ddZZ"2004-01-02-07:00"

ISO_DATETIME_FORMAT

yyyy-MM-dd'T'HH:mm:ss"2004-01-02T23:22:12"

ISO_DATETIME_TIME_ZONE_FORMAT

yyyy-MM-dd'T'HH:mm:ssZZ"2004-01-02T21:13:45-07:00"

ISO_TIME_FORMAT

'T'HH:mm:ss"T04:23:22"

ISO_TIME_NO_T_FORMAT

HH:mm:ss"05:12:34"

ISO_TIME_NO_T_TIME_ZONE_FORMAT

HH:mm:ssZZ"12:32:22-07:00"

ISO_TIME_TIME_ZONE_FORMAT

'T'HH:mm:ssZZ"T18:23:22-07:00"

SMTP_DATETIME_FORMAT

EEE, dd MMM yyyy HH:mm:ss Z"Wed, 01 Feb 2004 20:03:01 CST"



你可能感兴趣的:(java)