commons lang组件之格式化时期

问题

  你需要格式化一个日期,而SimpleDateFormat类又不是线程安全的.此外,你还需要标准的ISO日期格式.
 
解决方案

  使用FastDateFormat,它可以线程安全地格式化Java的Date对象.此外也可使用DateFormatUtils中的
  共有静态FastDateFormat实例,该实例对应着ISO8601所定义的日期时间格式标准.下面的例子以国际标准
  格式输出指定时区的日期和时间.
 
  Date now = new Date();
  String isoDT = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(now);
  System.out.println("It is currently: "+isoDT);
 
  这段代码将显示当前的时间和时区信息:
 
  It is currently: 2004-03-26T16:20:00-07:00
 
  DateFormatUtils还维护了许多符合ISO 8601标准的变量.见下表:
 
  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"
 
  如果你准备使用自定义的日期格式,请使用FastDateFormat而不是SimpleDateFormat:
  (不可以直接使用new 产生FastDateFormat对象,现在我们用DateFormatUtils与FastDateFormat类一起演示)
 
  String timeStr1 = DateFormatUtils.format(now1, "yyyy-MM-dd HH:mm:ss");
  String timeStr2 = DateFormatUtils.format(now1, "HH:mm:ss", TimeZone.getDefault(), Locale.getDefault());
  String timeStr5 = FastDateFormat.getInstance("yyyy-MM-dd",TimeZone.getDefault(), Locale.getDefault()).format(now1);
 
 
  为什么要在本可以使用SimpleDateFormat的时候转而使用FastDateFormat?SimpleDateFormat不是足够了吗?答案是:不够
  SimpleDateFormat不是线程安全的,而FastDateFormat是.事实上你可以发现SUN的所有格式化类都不是线程安全的,如果多
  个线程共用一个Java格式化对象,可能造成死锁,抛出RuntimeException异常或其它不协调的行为.如果在你的系统中有多个
  线程共享一个SimpleDateFormat实例,建议你马上改为FastDateFormat类.

package test2;

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.FastDateFormat;

/**
* 格式化日期
*
* @author Administrator
*/
public class DateFormatTest1 {

public static void main(String[] args) {

Date now = new Date();
Calendar now1 = Calendar.getInstance();

// DateFormatUtils维护的符合 ISO8601标准变量
String isoDT = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT
.format(now);
String isoDT1 = DateFormatUtils.ISO_DATETIME_FORMAT.format(now1);
System.out.println("isoDT:  " + isoDT);
System.out.println("isoDT1:  " + isoDT1);

// 自定义时期格式
String timeStr1 = DateFormatUtils.format(now1, "yyyy-MM-dd HH:mm:ss");
String timeStr2 = DateFormatUtils.format(now1, "HH:mm:ss", TimeZone
.getDefault(), Locale.getDefault());
String timeStr3 = DateFormatUtils.format(now, "yyyy-MM-dd HH:mm");
String timeStr4 = DateFormatUtils.format(now, "yyyy-MM-dd HH:mm:ssZZ",
TimeZone.getDefault(), Locale.getDefault());
String timeStr5 = FastDateFormat.getInstance("yyyy-MM-dd",
TimeZone.getDefault(), Locale.getDefault()).format(now1);
System.out.println("timeStr1:  " + timeStr1);
System.out.println("timeStr2:  " + timeStr2);
System.out.println("timeStr3:  " + timeStr3);
System.out.println("timeStr4:  " + timeStr4);
System.out.println("timeStr5:  " + timeStr5);
}
}


isoDT:  2009-07-08T18:26:31+08:00
isoDT1:  2009-07-08T18:26:31
timeStr1:  2009-07-08 18:26:31
timeStr2:  18:26:31
timeStr3:  2009-07-08 18:26
timeStr4:  2009-07-08 18:26:31+08:00
timeStr5:  2009-07-08

你可能感兴趣的:(apache,多线程,sun)