Java-TimeZone類常用方法詳解
阿新 • • 發佈:2019-02-07
這次主要整理下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