1.首先肯定要計算時間的時區,jdk8支持,根據時區ID來判斷是否處於夏令時。java
2.根據要判斷時區的id和對應的時間,便可判斷出是否處於夏令時。ide
public static boolean currentTimeIsDaylightTime(long time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(time));
calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
int year = calendar.get(calendar.YEAR);
int month = calendar.get(calendar.MONTH) + 1;
int dayOfMonth = calendar.get(calendar.DATE);
int hour = calendar.get(calendar.HOUR_OF_DAY);
int minute = calendar.get(calendar.MINUTE);
LocalDateTime local = LocalDateTime.of(year, month, dayOfMonth, hour, minute);
return isDaylightTime(local, ZoneId.of(Brasil_Time_Zone));
}
//傳入指定時間和時區,判斷是否處於夏令時之中
public static boolean isDaylightTime(LocalDateTime localDateTime, ZoneId zoneId) {
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
ZoneRules rules = zoneId.getRules();
return rules.isDaylightSavings(zonedDateTime.toInstant());
}
附錄:java主要城市時區對照表
- <timezone id="Asia/Shanghai">中國標準時間 (北京)</timezone>
- <timezone id="Asia/Hong_Kong">香港時間 (香港)</timezone>
- <timezone id="Asia/Taipei">臺北時間 (臺北)</timezone>
- <timezone id="Asia/Seoul">首爾</timezone>
- <timezone id="Asia/Tokyo">日本時間 (東京)</timezone>
- <timezone id="America/New_York">美國東部時間 (紐約)</timezone>
- <timezone id="America/Denver">美國山區時間 (丹佛)</timezone>
- <timezone id="America/Costa_Rica">美國中部時間 (哥斯達黎加)</timezone>
- <timezone id="America/Chicago">美國中部時間 (芝加哥)</timezone>
- <timezone id="America/Mexico_City">美國中部時間 (墨西哥城)</timezone>
- <timezone id="America/Regina">美國中部時間 (里賈納)</timezone>
- <timezone id="America/Los_Angeles">美國太平洋時間 (洛杉磯)</timezone>
- <timezone id="Pacific/Majuro">馬朱羅</timezone>
- <timezone id="Pacific/Midway">中途島</timezone>
- <timezone id="Pacific/Honolulu">檀香山</timezone>
- <timezone id="America/Anchorage">安克雷奇</timezone>
- <timezone id="America/Tijuana">美國太平洋時間 (提華納)</timezone>
- <timezone id="America/Phoenix">美國山區時間 (鳳凰城)</timezone>
- <timezone id="America/Chihuahua">奇瓦瓦</timezone>
- <timezone id="America/Bogota">哥倫比亞時間 (波哥大)</timezone>
- <timezone id="America/Caracas">委內瑞拉時間 (加拉加斯)</timezone>
- <timezone id="America/Barbados">大西洋時間 (巴巴多斯)</timezone>
- <timezone id="America/Manaus">亞馬遜標準時間 (馬瑙斯)</timezone>
- <timezone id="America/St_Johns">紐芬蘭時間 (聖約翰)</timezone>
- <timezone id="America/Santiago">聖地亞哥</timezone>
- <timezone id="America/Argentina/Buenos_Aires">布宜諾斯艾利斯</timezone>
- <timezone id="America/Godthab">戈特霍布</timezone>
- <timezone id="America/Montevideo">烏拉圭時間 (蒙得維的亞)</timezone>
- <timezone id="America/Sao_Paulo">聖保羅</timezone>
- <timezone id="Atlantic/South_Georgia">南喬治亞</timezone>
- <timezone id="Atlantic/Azores">亞述爾羣島</timezone>
- <timezone id="Atlantic/Cape_Verde">佛得角</timezone>
- <timezone id="Africa/Casablanca">卡薩布蘭卡</timezone>
- <timezone id="Europe/London">格林尼治標準時間 (倫敦)</timezone>
- <timezone id="Europe/Amsterdam">中歐標準時間 (阿姆斯特丹)</timezone>
- <timezone id="Europe/Belgrade">中歐標準時間 (貝爾格萊德)</timezone>
- <timezone id="Europe/Brussels">中歐標準時間 (布魯塞爾)</timezone>
- <timezone id="Europe/Sarajevo">中歐標準時間 (薩拉熱窩)</timezone>
- <timezone id="Africa/Brazzaville">西部非洲標準時間 (布拉扎維)</timezone>
- <timezone id="Africa/Windhoek">溫得和克</timezone>
- <timezone id="Asia/Amman">東歐標準時間 (安曼)</timezone>
- <timezone id="Europe/Athens">東歐標準時間 (雅典)</timezone>
- <timezone id="Asia/Beirut">東歐標準時間 (貝魯特)</timezone>
- <timezone id="Africa/Cairo">東歐標準時間 (開羅)</timezone>
- <timezone id="Europe/Helsinki">東歐標準時間 (赫爾辛基)</timezone>
- <timezone id="Asia/Jerusalem">以色列時間 (耶路撒冷)</timezone>
- <timezone id="Africa/Harare">中部非洲標準時間 (哈拉雷)</timezone>
- <timezone id="Europe/Minsk">明斯克</timezone>
- <timezone id="Asia/Baghdad">巴格達</timezone>
- <timezone id="Europe/Moscow">莫斯科</timezone>
- <timezone id="Asia/Kuwait">科威特</timezone>
- <timezone id="Africa/Nairobi">東部非洲標準時間 (內羅畢)</timezone>
- <timezone id="Asia/Tehran">伊朗標準時間 (德黑蘭)</timezone>
- <timezone id="Asia/Baku">巴庫</timezone>
- <timezone id="Asia/Tbilisi">第比利斯</timezone>
- <timezone id="Asia/Yerevan">埃裏溫</timezone>
- <timezone id="Asia/Dubai">迪拜</timezone>
- <timezone id="Asia/Kabul">阿富汗時間 (喀布爾)</timezone>
- <timezone id="Asia/Karachi">卡拉奇</timezone>
- <timezone id="Asia/Oral">烏拉爾</timezone>
- <timezone id="Asia/Yekaterinburg">葉卡捷林堡</timezone>
- <timezone id="Asia/Calcutta">加爾各答</timezone>
- <timezone id="Asia/Colombo">科倫坡</timezone>
- <timezone id="Asia/Katmandu">尼泊爾時間 (加德滿都)</timezone>
- <timezone id="Asia/Almaty">阿拉木圖</timezone>
- <timezone id="Asia/Rangoon">緬甸時間 (仰光)</timezone>
- <timezone id="Asia/Krasnoyarsk">克拉斯諾亞爾斯克</timezone>
- <timezone id="Asia/Bangkok">曼谷</timezone>
- <timezone id="Asia/Irkutsk">伊爾庫茨克時間 (伊爾庫茨克)</timezone>
- <timezone id="Asia/Kuala_Lumpur">吉隆坡</timezone>
- <timezone id="Australia/Perth">佩思</timezone>
- <timezone id="Asia/Yakutsk">雅庫茨克時間 (雅庫茨克)</timezone>
- <timezone id="Australia/Darwin">達爾文</timezone>
- <timezone id="Australia/Brisbane">布里斯班</timezone>
- <timezone id="Asia/Vladivostok">海參崴時間 (符拉迪沃斯託克)</timezone>
- <timezone id="Pacific/Guam">關島</timezone>
- <timezone id="Australia/Adelaide">阿德萊德</timezone>
- <timezone id="Australia/Hobart">霍巴特</timezone>
- <timezone id="Australia/Sydney">悉尼</timezone>
- <timezone id="Asia/Magadan">馬加丹時間 (馬加丹)</timezone>
- <timezone id="Pacific/Auckland">奧克蘭</timezone>
- <timezone id="Pacific/Fiji">斐濟</timezone>
- <timezone id="Pacific/Tongatapu">東加塔布</timezone>