详解Java中的时区类TimeZone的用法

  import java.text.DateFormat;

  import java.util.Date;

  import java.util.TimeZone;

  /**

  * TimeZone的测试程序

  */

  public class TimeZoneTest {

  public static void main(String[] args) {

  // 测试创建TimeZone对象的3种方法

  showUsageOfTimeZones() ;

  // 测试TimeZone的其它API

  testOtherAPIs() ;

  // 打印getTimeZone(String id)支持的所有id

  //printAllTimeZones() ;

  }

  /**

  * 测试创建TimeZone对象的3种方法

  */

  public static void showUsageOfTimeZones() {

  TimeZone tz;

  // (01) 默认时区

  tz = TimeZone.getDefault();

  printDateIn(tz) ;

  // (02) 设置时区为"GMT+08:00"

  tz = TimeZone.getTimeZone("GMT+08:00");

  printDateIn(tz) ;

  // (03) 设置时区为""

  tz = TimeZone.getTimeZone("Asia/Chongqing");

  printDateIn(tz) ;

  }

  /**

  * 打印 tz对应的日期/时间

  */

  private static void printDateIn(TimeZone tz) {

  // date为2013-09-19 14:22:30

  Date date = new Date(113, 8, 19, 14, 22, 30);

  // 获取默认的DateFormat,用于格式化Date

  DateFormat df = DateFormat.getInstance();

  // 设置时区为tz

  df.setTimeZone(tz);

  // 获取格式化后的字符串

  String str = df.format(date);

  System.out.println(tz.getID()+" :"+str);

  }

  /**

  * 测试TimeZone的其它API

  */

  public static void testOtherAPIs() {

  // 默认时区

  TimeZone tz = TimeZone.getDefault();

  // 获取“id”

  String id = tz.getID();

  // 获取“显示名称”

  String name = tz.getDisplayName();

  // 获取“时间偏移”。相对于“本初子午线”的偏移,单位是ms。

  int offset = tz.getRawOffset();

  // 获取“时间偏移” 对应的小时

  int gmt = offset/(3600*1000);

  System.out.printf("id=%s, name=%s, offset=%s(ms), gmt=%s

  ",

  id, name, offset, gmt);

  }

  /**

  * 打印getTimeZone(String id)支持的所有id

  */

  public static void printAllTimeZones() {

  String[] ids = TimeZone.getAvailableIDs();

  for (String id:ids) {

  //int offset = TimeZone.getTimeZone(avaIds[i]).getRawOffset();

  //System.out.println(i+" "+avaIds[i]+" "+offset / (3600 * 1000) + " ");

  System.out.printf(id+", ");

  }

  System.out.println();

  }

  }