1. 程式人生 > >Java-TimeZone類常用方法詳解

Java-TimeZone類常用方法詳解

這次主要整理下Java中TimeZone類的常用方法

一、TimeZone類的定義

  • TimeZone類是一個抽象類,主要包含了對於時區的各種操作,可以進行計算時間偏移量或夏令時等操作

二、TimeZone類的常用方法

  1、getAvailableIDs()

  • getAvailableIDs()
  • 獲取Java支援的所有時區ID
System.out.println(Arrays.toString(TimeZone.getAvailableIDs()));
  • getAvailableIDs(int rawOffset)
  • 根據 時間偏移量 來獲取時區ID
System.out.println(Arrays.toString(TimeZone.getAvailableIDs(28800000)));

  2、getDefault()

  • 獲取當前系統的預設時區,中國預設為東八區
// sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
System.out.println(TimeZone.getDefault()); 

  3、setDefault(TimeZone zone)

  • 設定當前系統的預設時區
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
// sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
System.out.println(TimeZone.getDefault());

  4、getTimeZone()

  • getTimeZone(String ID)
  • 根據 時區ID 來獲取其對應的時區
// sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
System.out.println(TimeZone.getTimeZone("GMT+08:00"));
  • getTimeZone(ZoneId zoneId)
  • 根據 ZoneId 物件來獲取其對應的時區
// sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,
// dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
System.out.println(TimeZone.getTimeZone(ZoneId.of("GMT+08:00")));

  5、getDisplayName()

  • getDisplayName()
  • 獲取該TimeZone物件的時區名稱
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getDisplayName()); // 中國標準時間
  • getDisplayName(Locale locale)
  • 獲取該TimeZone物件的時區名稱
  • locale:提供時區名稱的區域設定
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getDisplayName()); // 中國標準時間
System.out.println(timeZone.getDisplayName(Locale.ENGLISH)); // China Standard Time
  • getDisplayName(boolean daylight, int style)
  • 獲取該TimeZone物件的時區名稱
  • daylight:若為true,則指定夏令時名稱;若為false,則指定標準時間名稱
  • style
    • TimeZone.LONG:顯示全稱
    • TimeZone.SHORT:顯示簡稱
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getDisplayName()); // 中國標準時間
System.out.println(timeZone.getDisplayName(false, TimeZone.LONG)); // 中國標準時間
System.out.println(timeZone.getDisplayName(false, TimeZone.SHORT)); // CST
  • getDisplayName(boolean daylight, int style, Locale locale)
  • 獲取該TimeZone物件的時區名稱
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getDisplayName()); // 中國標準時間
System.out.println(timeZone.getDisplayName(false, TimeZone.LONG, Locale.ENGLISH)); // China Standard Time

  6、getID()

  • 獲取該TimeZone物件的時區ID
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getID()); // Asia/Shanghai

  6、setID(String ID)

  • 設定該TimeZone物件的時區ID
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
timeZone.setID("Asia/Chongqing");
System.out.println(timeZone.getID()); // Asia/Chongqing

  7、getOffset(long date)

  • 獲取該時間所在時區的時間偏移量
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getOffset(System.currentTimeMillis())); // 28800000

  8、getDSTSavings()

  • 在夏令時規則生效時,返回相對於標準時間提前的毫秒數,如果此時區不實施夏令時,則為 0
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
// 國內沒有夏令時,故為0
System.out.println(timeZone.getDSTSavings()); // 0

  9、getRawOffset()

  • 獲取時間原始偏移量,該值不受夏令時的影響,故稱為時間原始偏移量
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.getRawOffset()); // 28800000

  10、setRawOffset(int offsetMillis)

  • 設定時間原始偏移量
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
timeZone.setRawOffset(25200000);
System.out.println(timeZone.getRawOffset()); // 25200000

  11、toZoneId()

  • 將TimeZone物件轉換為ZoneId物件
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
ZoneId zoneId = timeZone.toZoneId();
System.out.println(zoneId); // Asia/Shanghai

  12、useDaylightTime()

  • 查詢此時區是否使用夏令時
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.useDaylightTime()); // false

  13、inDaylightTime(Date date)

  • 查詢給定的日期是否在此時區的夏令時中
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(timeZone.inDaylightTime(new Date())); // false

  14、hasSameRules(TimeZone other)

  • 如果兩時區僅ID不同,且具有相同的規則和時間偏移量,則返回true
  • 如果另一個時區為空,則返回false
TimeZone timeZone1 = TimeZone.getTimeZone("Asia/Shanghai");
TimeZone timeZone2 = TimeZone.getTimeZone("Asia/Chongqing");
System.out.println(timeZone1.hasSameRules(timeZone2)); // true