最近在項目中Fix了一個跨時區的bug,為了Fix這個bug真是費了九牛二虎之力呀。就現在看來主要原因還是平時的開發任務沒有涉及到這方面的概念,并且測試跨時區功能的Test Case也比較的難寫。為了以後能順利的解決跨時區功能的問題,制作了張跨時區表,總共102個時區:
UTC時區表
Dateline Standard Time|UTC-12:00 | UTC-11|UTC-11:00 | Hawaiian Standard Time|UTC-10:00 |
Alaskan Standard Time|UTC-09:00 | Pacific Standard Time (Mexico)|UTC-08:00 | Pacific Standard Time|UTC-08:00 |
US Mountain Standard Time|UTC-07:00 | Mountain Standard Time (Mexico)|UTC-07:00 | Mountain Standard Time|UTC-07:00 |
Central America Standard Time|UTC-06:00 | Central Standard Time|UTC-06:00 | Central Standard Time (Mexico)|UTC-06:00 |
Canada Central Standard Time|UTC-06:00 | SA Pacific Standard Time|UTC-05:00 | Eastern Standard Time|UTC-05:00 |
US Eastern Standard Time|UTC-05:00 | Venezuela Standard Time|UTC-04:30 | Paraguay Standard Time|UTC-04:00 |
Atlantic Standard Time|UTC-04:00 | Central Brazilian Standard Time|UTC-04:00 | SA Western Standard Time|UTC-04:00 |
Pacific SA Standard Time|UTC-04:00 | Newfoundland Standard Time|UTC-03:30 | E. South America Standard Time|UTC-03:00 |
Argentina Standard Time|UTC-03:00 | SA Eastern Standard Time|UTC-03:00 | Greenland Standard Time|UTC-03:00 |
Montevideo Standard Time|UTC-03:00 | Bahia Standard Time|UTC-03:00 | UTC-02|UTC-02:00 |
Mid-Atlantic Standard Time|UTC-02:00 | Azores Standard Time|UTC-01:00 | Cape Verde Standard Time|UTC-01:00 |
Morocco Standard Time|UTC | Coordinated Universal Time|UTC | GMT Standard Time|UTC |
Greenwich Standard Time|UTC | W. Europe Standard Time|UTC+01:00 | Central Europe Standard Time|UTC+01:00 |
Romance Standard Time|UTC+01:00 | Central European Standard Time|UTC+01:00 | Libya Standard Time|UTC+01:00 |
W. Central Africa Standard Time|UTC+01:00 | Namibia Standard Time|UTC+01:00 | GTB Standard Time|UTC+02:00 |
Middle East Standard Time|UTC+02:00 | Egypt Standard Time|UTC+02:00 | Syria Standard Time|UTC+02:00 |
E. Europe Standard Time|UTC+02:00 | South Africa Standard Time|UTC+02:00 | FLE Standard Time|UTC+02:00 |
Turkey Standard Time|UTC+02:00 | Jerusalem Standard Time|UTC+02:00 | Jordan Standard Time|UTC+03:00 |
Arabic Standard Time|UTC+03:00 | Kaliningrad Standard Time|UTC+03:00 | Arab Standard Time|UTC+03:00 |
E. Africa Standard Time|UTC+03:00 | Iran Standard Time|UTC+03:30</td> | Arabian Standard Time|UTC+04:00 |
Azerbaijan Standard Time|UTC+04:00 | Russian Standard Time|UTC+04:00 | Mauritius Standard Time|UTC+04:00 |
Georgian Standard Time|UTC+04:00 | Caucasus Standard Time|UTC+04:00 | Afghanistan Standard Time|UTC+04:30 |
Pakistan Standard Time|UTC+05:00 | West Asia Standard Time|UTC+05:00 | India Standard Time|UTC+05:30 |
Sri Lanka Standard Time|UTC+05:30 | Nepal Standard Time|UTC+05:45</td> | Central Asia Standard Time|UTC+06:00 |
Bangladesh Standard Time|UTC+06:00 | Ekaterinburg Standard Time|UTC+06:00 | Myanmar Standard Time|UTC+06:30 |
SE Asia Standard Time|UTC+07:00 | N. Central Asia Standard Time|UTC+07:00 | China Standard Time|UTC+08:00 |
North Asia Standard Time|UTC+08:00 | Malay Peninsula Standard Time|UTC+08:00 | W. Australia Standard Time|UTC+08:00 |
Taipei Standard Time|UTC+08:00 | Ulaanbaatar Standard Time|UTC+08:00 | North Asia East Standard Time|UTC+09:00 |
Tokyo Standard Time|UTC+09:00 | Korea Standard Time|UTC+09:00 | Cen. Australia Standard Time|UTC+09:30 |
AUS Central Standard Time|UTC+09:30 | E. Australia Standard Time|UTC+10:00 | AUS Eastern Standard Time|UTC+10:00 |
West Pacific Standard Time|UTC+10:00 | Tasmania Standard Time|UTC+10:00 | Yakutsk Standard Time|UTC+10:00 |
Central Pacific Standard Time|UTC+11:00 | Vladivostok Standard Time|UTC+11:00 | New Zealand Standard Time|UTC+12:00 |
UTC+12|UTC+12:00 | Fiji Standard Time|UTC+12:00 | Magadan Standard Time|UTC+12:00 |
時區表的用法
假如我想模拟2個時區來寫測試case,那麼我們可以這樣做:
TimeZoneInfo UTC_8 = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");//-8
TimeZoneInfo UTC_4 = TimeZoneInfo.Local;
DateTime dt_4 = new DateTime(2013, 5, 8, 7, 0, 0); //-4
DateTime dt_8 = TimeZoneInfo.ConvertTime(dt_4, UTC_8);
備注
在這張時區表中,用符号'|'對時區的标準名稱和時區對應UTC時間的偏移量值進行了分割,這樣做是為了友善檢索。在實際使用過程中,我們僅僅需要時區的标準名稱(可以參考本文的小例子)。