专栏首页BAT的乌托邦全球城市ZoneId和UTC时间偏移量的最全对照表
原创

全球城市ZoneId和UTC时间偏移量的最全对照表

前言

你好,我是A哥(YourBatman)。

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

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

本文提纲

版本约定

  • JDK:8

正文

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

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

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

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

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

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

城市ZoneId - UTC偏移量

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

方式一:第三方站点

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

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

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

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

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

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

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

ZoneId[] zoneIds = ZoneId.getAvailableZoneIds();

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

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

时区ID

UTC偏移

Asia/Shanghai

+08:00

Asia/Chongqing

+08:00

America/New_York

-05:00

Europe/London

Z

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()是如何计算的?为了避免大量贴代码影响阅读,我把它的源码放到了后台。对此部分计算逻辑感兴趣的同学可在公号后台回复“时区”二字来获取源码内容。

附:全部城市对应偏移量

时区ID

UTC偏移

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/London

Z

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

GMT

Z

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-0

Z

Europe/Jersey

Z

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_Helena

Z

Australia/Tasmania

+11:00

Libya

+02:00

Europe/Guernsey

Z

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_Man

Z

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+0

Z

Israel

+02:00

Africa/Banjul

Z

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/GMT

Z

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/Freetown

Z

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-Eire

Z

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/Bamako

Z

Europe/Saratov

+04:00

GB

Z

Mexico/General

-06:00

Pacific/Wallis

+12:00

Europe/Gibraltar

+01:00

Africa/Conakry

Z

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

Portugal

Z

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

Universal

Z

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_Tome

Z

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/Nouakchott

Z

Europe/Prague

+01:00

America/Indiana/Vincennes

-05:00

Antarctica/Mawson

+05:00

America/Kralendijk

-04:00

Antarctica/Troll

Z

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

UTC

Z

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/Universal

Z

PST8PDT

-08:00

Atlantic/Faeroe

Z

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/Abidjan

Z

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

Eire

Z

Europe/Amsterdam

+01:00

America/Indiana/Knox

-06:00

America/North_Dakota/Beulah

-06:00

Africa/Accra

Z

Atlantic/Faroe

Z

Mexico/BajaNorte

-08:00

America/Maceio

-03:00

Etc/UCT

Z

Pacific/Apia

+14:00

GMT0

Z

America/Atka

-10:00

Pacific/Niue

-11:00

Australia/Lord_Howe

+11:00

Europe/Dublin

Z

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

Zulu

Z

America/Kentucky/Monticello

-05:00

Africa/El_Aaiun

+01:00

Africa/Ouagadougou

Z

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/Reykjavik

Z

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/Madeira

Z

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/Zulu

Z

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

Iceland

Z

Pacific/Pohnpei

+11:00

Asia/Ujung_Pandang

+08:00

Atlantic/South_Georgia

-02:00

Europe/Lisbon

Z

Asia/Harbin

+08:00

Europe/Oslo

+01:00

Asia/Novokuznetsk

+07:00

CST6CDT

-06:00

Atlantic/Canary

Z

America/Knox_IN

-06:00

Asia/Kuwait

+03:00

SystemV/HST10

-10:00

Pacific/Efate

+11:00

Africa/Lome

Z

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

Greenwich

Z

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/Belfast

Z

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/GMT0

Z

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/Danmarkshavn

Z

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/Dakar

Z

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/Bissau

Z

Asia/Tehran

+03:30

WET

Z

Europe/Astrakhan

+04:00

Africa/Juba

+03:00

America/Campo_Grande

-04:00

America/Belem

-03:00

Etc/Greenwich

Z

Asia/Saigon

+07:00

America/Ensenada

-08:00

Pacific/Midway

-11:00

America/Jujuy

-03:00

Africa/Timbuktu

Z

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

UCT

Z

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/Monrovia

Z

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/UTC

Z

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偏移量该怎么破?

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JSR310新日期API(一)-时区与时间偏移量

    最近刚好有新项目使用到JSR-310(JDK8)中引入的新日期API,打算做一下总结。本文编写基于JDK11,部分API可能是JDK9之后新增的。

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

    本系列的目的是明明白白、彻彻底底的搞定日期/时间处理的几乎所有case。上篇文章 铺设所有涉及到的概念解释,例如GMT、UTC、夏令时、时间戳等等,若你还没看过...

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

    本系列的目的是明明白白、彻彻底底的搞定日期/时间处理的几乎所有case。上篇文章 铺设所有涉及到的概念解释,例如GMT、UTC、夏令时、时间戳等等,若你还没看过...

    YourBatman
  • Java 8 日期时间 API

    java 8 通过发布新的Date-Time API (JSR 310)来进一步加强对日期和时间的处理。

    一滴水的眼泪
  • GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?

    日期/时间的处理是平时开发中非常常见的场景,若只是简单的格式化场景那就还好,一旦涉及到时区、跨地域跨时区时间转换场景,甚至当还有GMT时间、UTC时间等一堆概念...

    YourBatman
  • 【小家java】java8新特性之---全新的日期、时间API(JSR 310规范),附SpringMVC、Mybatis中使用JSR310的正确姿势

    Tiago Fernandez做了一个很有意思的投票,统计对Java API的不满意程度,最终Java Date/Time/Calendar API被评为最烂A...

    YourBatman
  • 你还在用SimpleDateFormat格式化时间嘛?

    当多个线程使用同一个时间处理对象进行对日期的格式化的时候,会出现java.lang.NumberFormatException: multiple points...

    石的三次方
  • JSR310新日期API(二)-日期时间API

    其他的类库还有Year、Month、DayOfWeek、MonthDay、YearMonth等。值得注意的是:JSR-310增加的日期API是严格区分年月日-时...

    Throwable
  • 【Java8新特性】关于Java8中的日期时间API,你需要掌握这些!!

    作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了...

    冰河
  • ElasticSearch里面关于日期的存储方式

    我是攻城师
  • 大厂日期时间处理最佳实践

    以声明时间戳、使用日历处理日期和格式化解析日期时间。但这些类的API可读性差、使用繁琐,且非线程安全,如同设计的翔一样的IO,也是Java让人诟病的一大原因。

    JavaEdge
  • Java8新特性时间日期库DateTime API及示例

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    程序新视界
  • Java8新特性:新的时间和日期类库

    Java 8另一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中。借助新的时间和日期API可以以更简洁的方法处理时间和日期。

    我的小碗汤
  • LocalDateTime、OffsetDateTime、ZonedDateTime互转,这一篇绝对喂饱你

    也许平时开发中你只用到过LocalDateTime这个API,那是极好的,但是不能止步于此,否则就图样图森破了。

    YourBatman
  • 详解Java8的日期和时间API

    在JDK1.0的时候,Java引入了java.util.Date来处理日期和时间;在JDK1.1的时候又引入了功能更强大的java.util.Calendar,...

    王金龙
  • 【java8新特性(三)】新时间日期API

    LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提...

    周三不加班
  • Java中的时间和日期处理

    本文主要讲解Java 8的时间处理方式和Java8之前版本的时间处理方式的区别。笔者将Java8之前的jdk版本统称为旧版本。

    栋先生
  • 基础篇:JDK8的日期处理API-必知必备

    jdk8之前我们一直在用Date、Calender和SimpleDateFormat,但它的API不够强大,还存在线程安全问题,一直被人诟病。jdk8提供了新的...

    潜行前行
  • 别再用jodatime了!全网最权威Java8日期时间类LocalDate、LocalDateTime详解

    例如,现有的类(例如java.util.Date和SimpleDateFormatter)是非线程安全的,从而导致用户潜在的并发问题,这不是一般开发人员在编写日...

    JavaEdge

扫码关注云+社区

领取腾讯云代金券