1
头图

你好,我是A哥(YourBatman)。

如你所知,现行的世界标准时间是UTC世界协调时,时区已不直接参与时间计算。但是呢,城市名称or时区是人们所能记忆和容易沟通的名词,因此我们迫切需要一个对照表,能让只知道城市名或者ID的情况下就迅速知道它的偏移量,从而计算出当地的本地时间。

本文作为时区、偏移量知识点的补充,整体内容相对轻松,但依旧以实用为主,我尽力用本系列助你解决Java日期时间处理的所有痛点,对,是所有。日后应对日期/时间处理的任何问题,只需要看本系列就够了。

本文提纲

版本约定

  • JDK:8

正文

我们在去住酒店的时候,可以看到酒店大厅里的前台墙上一般会挂有好几个时钟,分别展示北京时间、纽约时间、伦敦时间、巴黎时间等等世界主要城市时间。

前面我连续用了两篇文章从概念介绍到Java实战,很全面的介绍了日期时间中GMT/UTC时间、夏令时、时间戳等等Java是如何处理的。从后台数据上看,这两篇文章的收藏量明显高于之前的绝大多数文章,正所谓数据不会骗人,说明日期时间的处理上确实有很同学是有痛点或者盲点的。

前两篇文章篇幅较长,适合收藏备用,可戳这里直达:全网最全!彻底弄透Java处理GMT/UTC日期时间

要想知道某个地方(城市)的本地时间,就需要先确定该城市的偏移量,然后以UTC为基准加上偏移量计算出其本地时间。

说明:本地时间的最小区域单位是城市

那么问题来了,世界上的“城市”那么多,如何知道具体某个城市它的偏移量是多少,从而计算出其本地时间呢?

城市ZoneId - UTC偏移量

下面给你介绍两种方式,任君选择。

方式一:第三方站点

在前面文章我给大家推荐过一个网站,上面列出了全球主要国家/城市ID对应的偏移量数据:

国家/城市ID与偏移量的对应关系,全部内容请参考网址(直接访问,无需梯子):https://www.timeanddate.com/t...

用这种方式的优点是方便快捷,但缺点也非常明显:

  1. 这个网址需要记忆/收藏,一定程度上增加了使用负担
  2. 依赖外网
  3. 由于夏令时的存在,该网站只能显示瞬时(当时)的一个对应情况,而这并非固定不变的

上述第3点是通过网站查询的致命问题,并且这一点还很容易被使用者忽略从而产生错误。作为有众多技法的程序员,当然希望能够“解决”此问题喽,那就看第二种方式吧。

方式二:自写程序(推荐)

前面文章介绍过Java提供了相关API来获取到全量的(已收录的)ZoneId:

ZoneId[] zoneIds = ZoneId.getAvailableZoneIds();

基于它,再经过一些计算就能得到ZoneId对应的偏移量,完全实现自主化,不再“求人”。

下面我先列出世界主要城市时区ID对应的UTC偏移量(文末附全量表格):

时区IDUTC偏移
Asia/Shanghai+08:00
Asia/Chongqing+08:00
America/New_York-05:00
Europe/LondonZ
Europe/Paris+01:00
Europe/Moscow+03:00
Asia/Tokyo+09:00
Asia/Dubai+04:00
Asia/Seoul+09:00
Asia/Bangkok+07:00
Asia/Jakarta+07:00
特别说明:本表格生成于北京时间2021-01-19 08:00:00,由于各地夏令时的存在,不同时间生成的表格UTC偏移值不尽相同

看名称知道这些都是哪些城市了吧?注意:没有Asia/Beijing哦,绝大部分情况下我国使用的都是Asia/Shanghai这个ID。

看英国伦敦(Europe/London)它的偏移量是Z,代表+00:00偏移量,属于0时区、0偏移量地区,毕竟格林威治在那,它是世界的“时间中心”。

值得特别注意:该表格必须绑定上生成时间才有意义,否则因为一些时间规则(如夏令时)的存在会导致不同时间生成的内容不一样。比如看我给你模拟的这个例子打印日志:

public static void main(String[] argv) {
    LocalDateTime bjTime = LocalDateTime.now();
    Map<String, ZoneOffset> allZoneIdOffSetMap = allZoneIdOffSet2MapByBjTime(bjTime);
    System.out.println("北京时间" + bjTime + ",美国纽约的偏移量:" + allZoneIdOffSetMap.get("America/New_York"));

    // 让当前北京时间深处纽约2021年夏令时时间区间内
    bjTime = LocalDateTime.of(2021, 05, 05, 18, 01, 01);
    allZoneIdOffSetMap = allZoneIdOffSet2MapByBjTime(bjTime);
    System.out.println("北京时间" + bjTime + ".000,美国纽约(夏令时期间)的偏移量:" + allZoneIdOffSetMap.get("America/New_York"));
}

运行程序,输出:

北京时间2021-01-19T08:25:13.162,美国纽约的偏移量:-05:00
北京时间2021-05-05T18:01:01.000,美国纽约(夏令时期间)的偏移量:-04:00

由此可见,纽约这个城市因为有夏令时的存在,因此在不同的时间段它的偏移量是不同的。备注:纽约2021年夏令时情况如下表:

当然喽,这个例子的最重点方法是allZoneIdOffSet2MapByBjTime()是如何计算的?为了避免大量贴代码影响阅读,我把它的源码放到了后台。对此部分计算逻辑感兴趣的同学可在公号后台回复“时区”二字来获取源码内容。

附:全部城市对应偏移量

时区IDUTC偏移
Asia/Aden+03:00
America/Cuiaba-04:00
Etc/GMT+9-09:00
Etc/GMT+8-08:00
Africa/Nairobi+03:00
America/Marigot-04:00
Asia/Aqtau+05:00
Pacific/Kwajalein+12:00
America/El_Salvador-06:00
Asia/Pontianak+07:00
Africa/Cairo+02:00
Pacific/Pago_Pago-11:00
Africa/Mbabane+02:00
Asia/Kuching+08:00
Pacific/Honolulu-10:00
Pacific/Rarotonga-10:00
America/Guatemala-06:00
Australia/Hobart+11:00
Europe/LondonZ
America/Belize-06:00
America/Panama-05:00
Asia/Chungking+08:00
America/Managua-06:00
America/Indiana/Petersburg-05:00
Asia/Yerevan+04:00
Europe/Brussels+01:00
GMTZ
Europe/Warsaw+01:00
America/Chicago-06:00
Asia/Kashgar+06:00
Chile/Continental-03:00
Pacific/Yap+10:00
CET+01:00
Etc/GMT-1+01:00
Etc/GMT-0Z
Europe/JerseyZ
America/Tegucigalpa-06:00
Etc/GMT-5+05:00
Europe/Istanbul+03:00
America/Eirunepe-05:00
Etc/GMT-4+04:00
America/Miquelon-03:00
Etc/GMT-3+03:00
Europe/Luxembourg+01:00
Etc/GMT-2+02:00
Etc/GMT-9+09:00
America/Argentina/Catamarca-03:00
Etc/GMT-8+08:00
Etc/GMT-7+07:00
Etc/GMT-6+06:00
Europe/Zaporozhye+02:00
Canada/Yukon-08:00
Canada/Atlantic-04:00
Atlantic/St_HelenaZ
Australia/Tasmania+11:00
Libya+02:00
Europe/GuernseyZ
America/Grand_Turk-05:00
US/Pacific-New-08:00
Asia/Samarkand+05:00
America/Argentina/Cordoba-03:00
Asia/Phnom_Penh+07:00
Africa/Kigali+02:00
Asia/Almaty+06:00
US/Alaska-09:00
Asia/Dubai+04:00
Europe/Isle_of_ManZ
America/Araguaina-03:00
Cuba-05:00
Asia/Novosibirsk+07:00
America/Argentina/Salta-03:00
Etc/GMT+3-03:00
Africa/Tunis+01:00
Etc/GMT+2-02:00
Etc/GMT+1-01:00
Pacific/Fakaofo+13:00
Africa/Tripoli+02:00
Etc/GMT+0Z
Israel+02:00
Africa/BanjulZ
Etc/GMT+7-07:00
Indian/Comoro+03:00
Etc/GMT+6-06:00
Etc/GMT+5-05:00
Etc/GMT+4-04:00
Pacific/Port_Moresby+10:00
US/Arizona-07:00
Antarctica/Syowa+03:00
Indian/Reunion+04:00
Pacific/Palau+09:00
Europe/Kaliningrad+02:00
America/Montevideo-03:00
Africa/Windhoek+02:00
Asia/Karachi+05:00
Africa/Mogadishu+03:00
Australia/Perth+08:00
Brazil/East-03:00
Etc/GMTZ
Asia/Chita+09:00
Pacific/Easter-05:00
Antarctica/Davis+07:00
Antarctica/McMurdo+13:00
Asia/Macao+08:00
America/Manaus-04:00
Africa/FreetownZ
Europe/Bucharest+02:00
Asia/Tomsk+07:00
America/Argentina/Mendoza-03:00
Asia/Macau+08:00
Europe/Malta+01:00
Mexico/BajaSur-07:00
Pacific/Tahiti-10:00
Africa/Asmera+03:00
Europe/Busingen+01:00
America/Argentina/Rio_Gallegos-03:00
Africa/Malabo+01:00
Europe/Skopje+01:00
America/Catamarca-03:00
America/Godthab-03:00
Europe/Sarajevo+01:00
Australia/ACT+11:00
GB-EireZ
Africa/Lagos+01:00
America/Cordoba-03:00
Europe/Rome+01:00
Asia/Dacca+06:00
Indian/Mauritius+04:00
Pacific/Samoa-11:00
America/Regina-06:00
America/Fort_Wayne-05:00
America/Dawson_Creek-07:00
Africa/Algiers+01:00
Europe/Mariehamn+02:00
America/St_Johns-03:30
America/St_Thomas-04:00
Europe/Zurich+01:00
America/Anguilla-04:00
Asia/Dili+09:00
America/Denver-07:00
Africa/BamakoZ
Europe/Saratov+04:00
GBZ
Mexico/General-06:00
Pacific/Wallis+12:00
Europe/Gibraltar+01:00
Africa/ConakryZ
Africa/Lubumbashi+02:00
Asia/Istanbul+03:00
America/Havana-05:00
NZ-CHAT+13:45
Asia/Choibalsan+08:00
America/Porto_Acre-05:00
Asia/Omsk+06:00
Europe/Vaduz+01:00
US/Michigan-05:00
Asia/Dhaka+06:00
America/Barbados-04:00
Europe/Tiraspol+02:00
Atlantic/Cape_Verde-01:00
Asia/Yekaterinburg+05:00
America/Louisville-05:00
Pacific/Johnston-10:00
Pacific/Chatham+13:45
Europe/Ljubljana+01:00
America/Sao_Paulo-03:00
Asia/Jayapura+09:00
America/Curacao-04:00
Asia/Dushanbe+05:00
America/Guyana-04:00
America/Guayaquil-05:00
America/Martinique-04:00
PortugalZ
Europe/Berlin+01:00
Europe/Moscow+03:00
Europe/Chisinau+02:00
America/Puerto_Rico-04:00
America/Rankin_Inlet-06:00
Pacific/Ponape+11:00
Europe/Stockholm+01:00
Europe/Budapest+01:00
America/Argentina/Jujuy-03:00
Australia/Eucla+08:45
Asia/Shanghai+08:00
UniversalZ
Europe/Zagreb+01:00
America/Port_of_Spain-04:00
Europe/Helsinki+02:00
Asia/Beirut+02:00
Asia/Tel_Aviv+02:00
Pacific/Bougainville+11:00
US/Central-06:00
Africa/Sao_TomeZ
Indian/Chagos+06:00
America/Cayenne-03:00
Asia/Yakutsk+09:00
Pacific/Galapagos-06:00
Australia/North+09:30
Europe/Paris+01:00
Africa/Ndjamena+01:00
Pacific/Fiji+12:00
America/Rainy_River-06:00
Indian/Maldives+05:00
Australia/Yancowinna+10:30
SystemV/AST4-04:00
Asia/Oral+05:00
America/Yellowknife-07:00
Pacific/Enderbury+13:00
America/Juneau-09:00
Australia/Victoria+11:00
America/Indiana/Vevay-05:00
Asia/Tashkent+05:00
Asia/Jakarta+07:00
Africa/Ceuta+01:00
Asia/Barnaul+07:00
America/Recife-03:00
America/Buenos_Aires-03:00
America/Noronha-02:00
America/Swift_Current-06:00
Australia/Adelaide+10:30
America/Metlakatla-09:00
Africa/Djibouti+03:00
America/Paramaribo-03:00
Asia/Qostanay+06:00
Europe/Simferopol+03:00
Europe/Sofia+02:00
Africa/NouakchottZ
Europe/Prague+01:00
America/Indiana/Vincennes-05:00
Antarctica/Mawson+05:00
America/Kralendijk-04:00
Antarctica/TrollZ
Europe/Samara+04:00
Indian/Christmas+07:00
America/Antigua-04:00
Pacific/Gambier-09:00
America/Indianapolis-05:00
America/Inuvik-07:00
America/Iqaluit-05:00
Pacific/Funafuti+12:00
UTCZ
Antarctica/Macquarie+11:00
Canada/Pacific-08:00
America/Moncton-04:00
Africa/Gaborone+02:00
Pacific/Chuuk+10:00
Asia/Pyongyang+09:00
America/St_Vincent-04:00
Asia/Gaza+02:00
Etc/UniversalZ
PST8PDT-08:00
Atlantic/FaeroeZ
Asia/Qyzylorda+05:00
Canada/Newfoundland-03:30
America/Kentucky/Louisville-05:00
America/Yakutat-09:00
Asia/Ho_Chi_Minh+07:00
Antarctica/Casey+08:00
Europe/Copenhagen+01:00
Africa/Asmara+03:00
Atlantic/Azores-01:00
Europe/Vienna+01:00
ROK+09:00
Pacific/Pitcairn-08:00
America/Mazatlan-07:00
Australia/Queensland+10:00
Pacific/Nauru+12:00
Europe/Tirane+01:00
Asia/Kolkata+05:30
SystemV/MST7-07:00
Australia/Canberra+11:00
MET+01:00
Australia/Broken_Hill+10:30
Europe/Riga+02:00
America/Dominica-04:00
Africa/AbidjanZ
America/Mendoza-03:00
America/Santarem-03:00
Kwajalein+12:00
America/Asuncion-03:00
Asia/Ulan_Bator+08:00
NZ+13:00
America/Boise-07:00
Australia/Currie+11:00
EST5EDT-05:00
Pacific/Guam+10:00
Pacific/Wake+12:00
Atlantic/Bermuda-04:00
America/Costa_Rica-06:00
America/Dawson-08:00
Asia/Chongqing+08:00
EireZ
Europe/Amsterdam+01:00
America/Indiana/Knox-06:00
America/North_Dakota/Beulah-06:00
Africa/AccraZ
Atlantic/FaroeZ
Mexico/BajaNorte-08:00
America/Maceio-03:00
Etc/UCTZ
Pacific/Apia+14:00
GMT0Z
America/Atka-10:00
Pacific/Niue-11:00
Australia/Lord_Howe+11:00
Europe/DublinZ
Pacific/Truk+10:00
MST7MDT-07:00
America/Monterrey-06:00
America/Nassau-05:00
America/Jamaica-05:00
Asia/Bishkek+06:00
America/Atikokan-05:00
Atlantic/Stanley-03:00
Australia/NSW+11:00
US/Hawaii-10:00
SystemV/CST6-06:00
Indian/Mahe+04:00
Asia/Aqtobe+05:00
America/Sitka-09:00
Asia/Vladivostok+10:00
Africa/Libreville+01:00
Africa/Maputo+02:00
ZuluZ
America/Kentucky/Monticello-05:00
Africa/El_Aaiun+01:00
Africa/OuagadougouZ
America/Coral_Harbour-05:00
Pacific/Marquesas-09:30
Brazil/West-04:00
America/Aruba-04:00
America/North_Dakota/Center-06:00
America/Cayman-05:00
Asia/Ulaanbaatar+08:00
Asia/Baghdad+03:00
Europe/San_Marino+01:00
America/Indiana/Tell_City-06:00
America/Tijuana-08:00
Pacific/Saipan+10:00
SystemV/YST9-09:00
Africa/Douala+01:00
America/Chihuahua-07:00
America/Ojinaga-07:00
Asia/Hovd+07:00
America/Anchorage-09:00
Chile/EasterIsland-05:00
America/Halifax-04:00
Antarctica/Rothera-03:00
America/Indiana/Indianapolis-05:00
US/Mountain-07:00
Asia/Damascus+02:00
America/Argentina/San_Luis-03:00
America/Santiago-03:00
Asia/Baku+04:00
America/Argentina/Ushuaia-03:00
Atlantic/ReykjavikZ
Africa/Brazzaville+01:00
Africa/Porto-Novo+01:00
America/La_Paz-04:00
Antarctica/DumontDUrville+10:00
Asia/Taipei+08:00
Antarctica/South_Pole+13:00
Asia/Manila+08:00
Asia/Bangkok+07:00
Africa/Dar_es_Salaam+03:00
Poland+01:00
Atlantic/MadeiraZ
Antarctica/Palmer-03:00
America/Thunder_Bay-05:00
Africa/Addis_Ababa+03:00
Asia/Yangon+06:30
Europe/Uzhgorod+02:00
Brazil/DeNoronha-02:00
Asia/Ashkhabad+05:00
Etc/ZuluZ
America/Indiana/Marengo-05:00
America/Creston-07:00
America/Punta_Arenas-03:00
America/Mexico_City-06:00
Antarctica/Vostok+06:00
Asia/Jerusalem+02:00
Europe/Andorra+01:00
US/Samoa-11:00
PRC+08:00
Asia/Vientiane+07:00
Pacific/Kiritimati+14:00
America/Matamoros-06:00
America/Blanc-Sablon-04:00
Asia/Riyadh+03:00
IcelandZ
Pacific/Pohnpei+11:00
Asia/Ujung_Pandang+08:00
Atlantic/South_Georgia-02:00
Europe/LisbonZ
Asia/Harbin+08:00
Europe/Oslo+01:00
Asia/Novokuznetsk+07:00
CST6CDT-06:00
Atlantic/CanaryZ
America/Knox_IN-06:00
Asia/Kuwait+03:00
SystemV/HST10-10:00
Pacific/Efate+11:00
Africa/LomeZ
America/Bogota-05:00
America/Menominee-06:00
America/Adak-10:00
Pacific/Norfolk+12:00
Europe/Kirov+03:00
America/Resolute-06:00
Pacific/Tarawa+12:00
Africa/Kampala+03:00
Asia/Krasnoyarsk+07:00
GreenwichZ
SystemV/EST5-05:00
America/Edmonton-07:00
Europe/Podgorica+01:00
Australia/South+10:30
Canada/Central-06:00
Africa/Bujumbura+02:00
America/Santo_Domingo-04:00
US/Eastern-05:00
Europe/Minsk+03:00
Pacific/Auckland+13:00
Africa/Casablanca+01:00
America/Glace_Bay-04:00
Canada/Eastern-05:00
Asia/Qatar+03:00
Europe/Kiev+02:00
Singapore+08:00
Asia/Magadan+11:00
SystemV/PST8-08:00
America/Port-au-Prince-05:00
Europe/BelfastZ
America/St_Barthelemy-04:00
Asia/Ashgabat+05:00
Africa/Luanda+01:00
America/Nipigon-05:00
Atlantic/Jan_Mayen+01:00
Brazil/Acre-05:00
Asia/Muscat+04:00
Asia/Bahrain+03:00
Europe/Vilnius+02:00
America/Fortaleza-03:00
Etc/GMT0Z
US/East-Indiana-05:00
America/Hermosillo-07:00
America/Cancun-05:00
Africa/Maseru+02:00
Pacific/Kosrae+11:00
Africa/Kinshasa+01:00
Asia/Kathmandu+05:45
Asia/Seoul+09:00
Australia/Sydney+11:00
America/Lima-05:00
Australia/LHI+11:00
America/St_Lucia-04:00
Europe/Madrid+01:00
America/Bahia_Banderas-06:00
America/Montserrat-04:00
Asia/Brunei+08:00
America/Santa_Isabel-08:00
Canada/Mountain-07:00
America/Cambridge_Bay-07:00
Asia/Colombo+05:30
Australia/West+08:00
Indian/Antananarivo+03:00
Australia/Brisbane+10:00
Indian/Mayotte+03:00
US/Indiana-Starke-06:00
Asia/Urumqi+06:00
US/Aleutian-10:00
Europe/Volgograd+04:00
America/Lower_Princes-04:00
America/Vancouver-08:00
Africa/Blantyre+02:00
America/Rio_Branco-05:00
America/DanmarkshavnZ
America/Detroit-05:00
America/Thule-04:00
Africa/Lusaka+02:00
Asia/Hong_Kong+08:00
Iran+03:30
America/Argentina/La_Rioja-03:00
Africa/DakarZ
SystemV/CST6CDT-06:00
America/Tortola-04:00
America/Porto_Velho-04:00
Asia/Sakhalin+11:00
Etc/GMT+10-10:00
America/Scoresbysund-01:00
Asia/Kamchatka+12:00
Asia/Thimbu+06:00
Africa/Harare+02:00
Etc/GMT+12-12:00
Etc/GMT+11-11:00
Navajo-07:00
America/Nome-09:00
Europe/Tallinn+02:00
Turkey+03:00
Africa/Khartoum+02:00
Africa/Johannesburg+02:00
Africa/Bangui+01:00
Europe/Belgrade+01:00
Jamaica-05:00
Africa/BissauZ
Asia/Tehran+03:30
WETZ
Europe/Astrakhan+04:00
Africa/Juba+03:00
America/Campo_Grande-04:00
America/Belem-03:00
Etc/GreenwichZ
Asia/Saigon+07:00
America/Ensenada-08:00
Pacific/Midway-11:00
America/Jujuy-03:00
Africa/TimbuktuZ
America/Bahia-03:00
America/Goose_Bay-04:00
America/Virgin-04:00
America/Pangnirtung-05:00
Asia/Katmandu+05:45
America/Phoenix-07:00
Africa/Niamey+01:00
America/Whitehorse-08:00
Pacific/Noumea+11:00
Asia/Tbilisi+04:00
America/Montreal-05:00
Asia/Makassar+08:00
America/Argentina/San_Juan-03:00
Hongkong+08:00
UCTZ
Asia/Nicosia+02:00
America/Indiana/Winamac-05:00
SystemV/MST7MDT-07:00
America/Argentina/ComodRivadavia-03:00
America/Boa_Vista-04:00
America/Grenada-04:00
Asia/Atyrau+05:00
Australia/Darwin+09:30
Asia/Khandyga+09:00
Asia/Kuala_Lumpur+08:00
Asia/Famagusta+02:00
Asia/Thimphu+06:00
Asia/Rangoon+06:30
Europe/Bratislava+01:00
Asia/Calcutta+05:30
America/Argentina/Tucuman-03:00
Asia/Kabul+04:30
Indian/Cocos+06:30
Japan+09:00
Pacific/Tongatapu+13:00
America/New_York-05:00
Etc/GMT-12+12:00
Etc/GMT-11+11:00
Etc/GMT-10+10:00
SystemV/YST9YDT-09:00
Europe/Ulyanovsk+04:00
Etc/GMT-14+14:00
Etc/GMT-13+13:00
W-SU+03:00
America/Merida-06:00
EET+02:00
America/Rosario-03:00
Canada/Saskatchewan-06:00
America/St_Kitts-04:00
Arctic/Longyearbyen+01:00
America/Fort_Nelson-07:00
America/Caracas-04:00
America/Guadeloupe-04:00
Asia/Hebron+02:00
Indian/Kerguelen+05:00
SystemV/PST8PDT-08:00
Africa/MonroviaZ
Asia/Ust-Nera+10:00
Egypt+02:00
Asia/Srednekolymsk+11:00
America/North_Dakota/New_Salem-06:00
Asia/Anadyr+12:00
Australia/Melbourne+11:00
Asia/Irkutsk+08:00
America/Shiprock-07:00
America/Winnipeg-06:00
Europe/Vatican+01:00
Asia/Amman+02:00
Etc/UTCZ
SystemV/AST4ADT-04:00
Asia/Tokyo+09:00
America/Toronto-05:00
Asia/Singapore+08:00
Australia/Lindeman+10:00
America/Los_Angeles-08:00
SystemV/EST5EDT-05:00
Pacific/Majuro+12:00
America/Argentina/Buenos_Aires-03:00
Europe/Nicosia+02:00
Pacific/Guadalcanal+11:00
Europe/Athens+02:00
US/Pacific-08:00
Europe/Monaco+01:00
特别说明:本表格生成于北京时间2021-01-19 08:00:00,由于各地夏令时的存在,不同时间生成的表格UTC偏移值不尽相同

有了这个表格,本文又非常值得收藏喽。有需要的时候直接拿出来ctrl + f查一下即可,不用再进入xxx网站啦。

当然喽,个人建议还是掌握程序的计算逻辑更稳妥些,可以“动态的”获取100%正确的偏移量,因此有需要此计算逻辑的同学直接在公号后台回复“时区”二字即可获取源码内容。

总结

本文围绕时区偏移量,通过自写代码的方式输出所有城市时区ID对应的偏移量值,进一步加深对时区和偏移量,以及夏令时的了解。

这部分内容是时间处理的难点,更是重点,往往程序bug就发生在这些地方(比如我在此趟了一坑),希望能引起各位重视。

下篇文章将继续补充介绍和实战场景非常贴近:LocalDateTime、OffsetDateTime、ZonedDateTime跨时区互转,保持关注。

本文思考题

看完了不一定懂,看懂了不一定会。来,文末3个思考题帮你复盘:

  1. 偏移量Z代表什么含义?
  2. ZoneId和ZoneOffset是如何建立对应关系的?
  3. 若某个城市不在ZoneId列表里面,想要获取其UTC偏移量该怎么破?

推荐阅读

GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?

全网最全!彻底弄透Java处理GMT/UTC日期时间

关注我

分享、成长,拒绝浅藏辄止。关注【BAT的乌托邦】回复关键字专栏有Spring技术栈、中间件等小而美的纯原创专栏。本文已被 https://www.yourbatman.cn 收录。

本文所属专栏:JDK日期时间,公号后台回复专栏名即可获取全部内容。

A哥(YourBatman):Spring Framework/Boot开源贡献者,Java架构师。非常注重基本功修养,相信底层基础决定上层建筑,坚实基础才能焕发程序员更强生命力。文章特点为以小而美专栏形式重构知识体系,抽丝剥茧,致力于做人人能看懂的最好的专栏系列。可加我好友(fsx1056342982)共勉哦!


YourBatman
277 声望66 粉丝

引用和评论

0 条评论