我应该传递什么值给TimeZoneInfo.FindSystemTimeZoneById(String)函数?

114

https://dev59.com/wWsz5IYBdhLWcg3wbHLF#7908482 - oCcSking
11个回答

115

以下是从Windows注册表中提取的Windows 8中的时区列表:

阿富汗标准时间
阿拉斯加标准时间
阿拉斯加标准时间\动态夏令时
阿拉伯标准时间
阿拉伯联合酋长国标准时间
阿拉伯语标准时间
阿拉伯语标准时间\动态夏令时
阿根廷标准时间
阿根廷标准时间\动态夏令时
大西洋标准时间
大西洋标准时间\动态夏令时
澳大利亚中部标准时间
澳大利亚东部标准时间
澳大利亚东部标准时间\动态夏令时
阿塞拜疆标准时间
亚速尔群岛标准时间
亚速尔群岛标准时间\动态夏令时
巴伊亚标准时间
巴伊亚标准时间\动态夏令时
孟加拉标准时间
孟加拉标准时间\动态夏令时
加拿大中部标准时间
佛得角标准时间
高加索标准时间
高加索标准时间\动态夏令时
澳大利亚中部标准时间
澳大利亚中部标准时间\动态夏令时
中美洲标准时间
中亚标准时间
巴西中部标准时间
巴西中部标准时间\动态夏令时
中欧标准时间
中欧夏令时间
中太平洋标准时间
中部标准时间
中部标准时间\动态夏令时
中部标准时间(墨西哥)
中国标准时间
日期变更线标准时间
东非标准时间
澳大利亚东部标准时间
东欧标准时间
南美洲东部标准时间
南美洲东部标准时间\动态夏令时
东部标准时间
东部标准时间\动态夏令时
埃及标准时间
埃及标准时间\动态夏令时
叶卡捷琳堡标准时间
叶卡捷琳堡标准时间\动态夏令时
斐济标准时间
斐济标准时间\动态夏令时
芬兰标准时间
格鲁吉亚标准时间
格林威治标准时间
格陵兰岛标准时间
格陵兰岛标准时间\动态夏令时
格林威治标准时间
东欧标准时间
夏威夷标准时间
印度标准时间
伊朗标准时间
伊朗标准时间\动态夏令时
以色列标准时间
以色列标准时间\动态夏令时
约旦标准时间
约旦标准时间\动态夏令时
加里宁格勒标准时间
加里宁格勒标准时间\动态夏令时
堪察加标准时间
韩国标准时间
利比亚标准时间
利比亚标准时间\动态夏令时
马加丹标准时间
马加丹标准时间\动态夏令时
毛里求斯标准时间中大西洋标准时间
中东标准时间
中东标准时间\动态夏令时
蒙得维的亚标准时间
蒙得维的亚标准时间\动态夏令时
摩洛哥标准时间
摩洛哥标准时间\动态夏令时
山区标准时间
山区标准时间\动态夏令时
墨西哥山地标准时间
缅甸标准时间
北中亚标准时间
北中亚标准时间\动态夏令时
纳米比亚标准时间
纳米比亚标准时间\动态夏令时
尼泊尔标准时间
新西兰标准时间
新西兰标准时间\动态夏令时
纽芬兰标准时间
纽芬兰标准时间\动态夏令时
北亚东部标准时间
北亚东部标准时间\动态夏令时
北亚标准时间
北亚标准时间\动态夏令时
南美洲太平洋标准时间
南美洲太平洋标准时间\动态夏令时
太平洋标准时间
太平洋标准时间\动态夏令时
墨西哥太平洋标准时间
巴基斯坦标准时间
巴基斯坦标准时间\动态夏令时
巴拉圭标准时间
巴拉圭标准时间\动态夏令时
欧洲中部时间
俄罗斯标准时间
俄罗斯标准时间\动态夏令时
南非东部标准时间
南美太平洋标准时间
南美西部标准时间
萨摩亚标准时间
萨摩亚标准时间\动态夏令时
东南亚标准时间
新加坡标准时间
南非标准时间
斯里兰卡标准时间
叙利亚标准时间
叙利亚标准时间\动态夏令时
台北标准时间
塔斯马尼亚标准时间
塔斯马尼亚标准时间\动态夏令时
东京标准时间
汤加标准时间
土耳其标准时间
土耳其标准时间\动态夏令时
乌兰巴托标准时间
美国东部标准时间
美国东部标准时间\动态夏令时
美国山区标准时间
协调世界时
协调世界时+12
协调世界时-02
协调世界时-11
委内瑞拉标准时间
委内瑞拉标准时间\动态夏令时
海参崴标准时间
海参崴标准时间\动态夏令时
澳大利亚西部标准时间
澳大利亚西部标准时间\动态夏令时
中非标准时间
欧洲西部时间
西亚标准时间
西太平洋标准时间
雅库茨克标准时间
雅库茨克标准时间\动态夏令时

7
尽管英国的时间没有显示为 GMT / BST,但实际上是“格林威治标准时间”(GMT Standard Time)(参考https://dev59.com/kG865IYBdhLWcg3wA5uc)。 - SharpC
5
对于那些想知道什么是动态夏令时的人......请参考https://blogs.msdn.microsoft.com/bclteam/2007/06/07/exploring-windows-time-zones-with-system-timezoneinfo-josh-free/。 - Mick
非常有帮助!我也很准确!这实际上帮助我为我的应用程序收集了信息:private static TimeZoneInfo INDIA_ZONE = TimeZoneInfo.FindSystemTimeZoneById("INDIA Standard Time"); - PatsonLeaner
4
“TimeZoneInfo.GetSystemTimeZones()” 返回的 “E. Australia Standard Time” 和上面的“AUS Eastern Standard Time”有所不同。前者考虑了夏令时,而后者则没有考虑。详见https://dotnetfiddle.net/k3yKN4。 - Martin Capodici
2
在 .NET Core 的跨平台世界中,时区 ID 取决于代码运行的位置。例如,在 Mac 上,悉尼的时区 ID 是 "Australia/Sydney",而在 Windows 10 上,对应的时区是 "E. Australia Standard Time"。 - Sudhanshu Mishra

47

你可以从 TimeZoneInfo 类中的静态列表中获取它们。

var infos = TimeZoneInfo.GetSystemTimeZones();
foreach (var info in infos)
{
    Console.WriteLine(info.Id);
}

例子:

  var tzInfo = TimeZoneInfo.FindSystemTimeZoneById("New Zealand Standard Time");

或者,如果您只需要像DJ KRAZE建议的时区ID列表

  var timeZoneIds = TimeZoneInfo.GetSystemTimeZones().Select(t => t.Id);

+1 我会创建变量lstTimeZones = new List<string>();,然后将console.WriteLine(info.Id);替换为lstTimeZones.Add(info.Id);。 - MethodMan

21

可用的时区为:

Console.WriteLine(string.Join("\n",TimeZoneInfo.GetSystemTimeZones().Select(x=>x.Id)));

结果:

Dateline Standard Time
UTC-11
Aleutian Standard Time
Hawaiian Standard Time
Marquesas Standard Time
Alaskan Standard Time
UTC-09
Pacific Standard Time (Mexico)
UTC-08
Pacific Standard Time
US Mountain Standard Time
Mountain Standard Time (Mexico)
Mountain Standard Time
Central America Standard Time
Central Standard Time
Easter Island Standard Time
Central Standard Time (Mexico)
Canada Central Standard Time
SA Pacific Standard Time
Eastern Standard Time (Mexico)
Eastern Standard Time
Haiti Standard Time
Cuba Standard Time
US Eastern Standard Time
Paraguay Standard Time
Atlantic Standard Time
Venezuela Standard Time
Central Brazilian Standard Time
SA Western Standard Time
Pacific SA Standard Time
Turks And Caicos Standard Time
Newfoundland Standard Time
Tocantins Standard Time
E. South America Standard Time
SA Eastern Standard Time
Argentina Standard Time
Greenland Standard Time
Montevideo Standard Time
Saint Pierre Standard Time
Bahia Standard Time
UTC-02
Mid-Atlantic Standard Time
Azores Standard Time
Cape Verde Standard Time
UTC
Morocco Standard Time
GMT Standard Time
Greenwich Standard Time
W. Europe Standard Time
Central Europe Standard Time
Romance Standard Time
Central European Standard Time
W. Central Africa Standard Time
Namibia Standard Time
Jordan Standard Time
GTB Standard Time
Middle East Standard Time
Egypt Standard Time
E. Europe Standard Time
Syria Standard Time
West Bank Standard Time
South Africa Standard Time
FLE Standard Time
Israel Standard Time
Kaliningrad Standard Time
Libya Standard Time
Arabic Standard Time
Turkey Standard Time
Arab Standard Time
Belarus Standard Time
Russian Standard Time
E. Africa Standard Time
Iran Standard Time
Arabian Standard Time
Astrakhan Standard Time
Azerbaijan Standard Time
Russia Time Zone 3
Mauritius Standard Time
Georgian Standard Time
Caucasus Standard Time
Afghanistan Standard Time
West Asia Standard Time
Ekaterinburg Standard Time
Pakistan Standard Time
India Standard Time
Sri Lanka Standard Time
Nepal Standard Time
Central Asia Standard Time
Bangladesh Standard Time
Omsk Standard Time
Myanmar Standard Time
SE Asia Standard Time
Altai Standard Time
W. Mongolia Standard Time
North Asia Standard Time
N. Central Asia Standard Time
Tomsk Standard Time
China Standard Time
North Asia East Standard Time
Singapore Standard Time
W. Australia Standard Time
Taipei Standard Time
Ulaanbaatar Standard Time
North Korea Standard Time
Aus Central W. Standard Time
Transbaikal Standard Time
Tokyo Standard Time
Korea Standard Time
Yakutsk Standard Time
Cen. Australia Standard Time
AUS Central Standard Time
E. Australia Standard Time
AUS Eastern Standard Time
West Pacific Standard Time
Tasmania Standard Time
Vladivostok Standard Time
Lord Howe Standard Time
Bougainville Standard Time
Russia Time Zone 10
Magadan Standard Time
Norfolk Standard Time
Sakhalin Standard Time
Central Pacific Standard Time
Russia Time Zone 11
New Zealand Standard Time
UTC+12
Fiji Standard Time
Kamchatka Standard Time
Chatham Islands Standard Time
Tonga Standard Time
Samoa Standard Time
Line Islands Standard Time

11

请看一下TimeZoneInfo上的静态方法TimeZoneInfo.GetSystemTimeZones()

这将返回一个包含您操作系统上所有 TimeZoneInfo 的列表,这些信息存储在注册表下:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones

例如,“GMT标准时间”对应的时区是“都柏林、爱丁堡、里斯本和伦敦”。


8

要获取最新的时区列表,请使用 Windows 的 tzutil 命令:

tzutil /l

在此您可以找到微软官方的时区 ID 列表,位于 MSDN 网站上: https://learn.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/default-time-zones

  ID      |   Time zone name
----------|------------------------
  0       |   Dateline Standard Time
  110     |   UTC-11
  200     |   Hawaiian Standard Time
  300     |   Alaskan Standard Time
  400     |   Pacific Standard Time
  410     |   Pacific Standard Time (Mexico)
  500     |   Mountain Standard Time
  510     |   Mountain Standard Time (Mexico)
  520     |   US Mountain Standard Time
  600     |   Canada Central Standard Time
  610     |   Central America Standard Time
  620     |   Central Standard Time
  630     |   Central Standard Time (Mexico)
  700     |   Eastern Standard Time
  710     |   SA Pacific Standard Time
  720     |   US Eastern Standard Time
  840     |   Venezuela Standard Time
  800     |   Atlantic Standard Time
  810     |   Central Brazilian Standard Time
  820     |   Pacific SA Standard Time
  830     |   SA Western Standard Time
  850     |   Paraguay Standard Time
  900     |   Newfoundland Standard Time
  910     |   E. South America Standard Time
  920     |   Greenland Standard Time
  930     |   Montevideo Standard Time
  940     |   SA Eastern Standard Time
  950     |   Argentina Standard Time
  1000    |   Mid-Atlantic Standard Time
  1010    |   UTC-2
  1100    |   Azores Standard Time
  1110    |   Cabo Verde Standard Time
  1200    |   GMT Standard Time
  1210    |   Greenwich Standard Time
  1220    |   Morocco Standard Time
  1230    |   UTC
  1300    |   Central Europe Standard Time
  1310    |   Central European Standard Time
  1320    |   Romance Standard Time
  1330    |   W. Central Africa Standard Time
  1340    |   W. Europe Standard Time
  1350    |   Namibia Standard Time
  1400    |   E. Europe Standard Time
  1410    |   Egypt Standard Time
  1420    |   FLE Standard Time
  1430    |   GTB Standard Time
  1440    |   Israel Standard Time
  1450    |   Jordan Standard Time
  1460    |   Middle East Standard Time
  1470    |   South Africa Standard Time
  1480    |   Syria Standard Time
  1490    |   Turkey Standard Time
  1500    |   Arab Standard Time
  1510    |   Arabic Standard Time
  1520    |   E. Africa Standard Time
  1530    |   Kaliningrad Standard Time
  1550    |   Iran Standard Time
  1540    |   Russian Standard Time
  1600    |   Arabian Standard Time
  1610    |   Azerbaijan Standard Time
  1620    |   Caucasus Standard Time
  1640    |   Georgian Standard Time
  1650    |   Mauritius Standard Time
  1630    |   Afghanistan Standard Time
  1710    |   West Asia Standard Time
  1750    |   Pakistan Standard Time
  1720    |   India Standard Time
  1730    |   Sri Lanka Standard Time
  1740    |   Nepal Standard Time
  1700    |   Ekaterinburg Standard Time
  1800    |   Central Asia Standard Time
  1830    |   Bangladesh Standard Time
  1820    |   Myanmar Standard Time
  1810    |   N. Central Asia Standard Time
  1910    |   SE Asia Standard Time
  1900    |   North Asia Standard Time
  2000    |   China Standard Time
  2020    |   Singapore Standard Time
  2030    |   Taipei Standard Time
  2040    |   W. Australia Standard Time
  2050    |   Ulaanbaatar Standard Time
  2010    |   North Asia East Standard Time
  2100    |   Korea Standard Time
  2110    |   Tokyo Standard Time
  2130    |   AUS Central Standard Time
  2140    |   Cen. Australia Standard Time
  2120    |   Yakutsk Standard Time
  2200    |   AUS Eastern Standard Time
  2210    |   E. Australia Standard Time
  2220    |   Tasmania Standard Time
  2240    |   West Pacific Standard Time
  2230    |   Vladivostok Standard Time
  2300    |   Central Pacific Standard Time
  2310    |   Magadan Standard Time
  2400    |   Fiji Standard Time
  2410    |   New Zealand Standard Time
  2430    |   UTC+12
  2500    |   Tonga Standard Time
  2510    |   Samoa Standard Time

4
最新的微软文档,包括这些内容,可以在https://support.microsoft.com/en-gb/help/973627/microsoft-time-zone-index-values找到。
时区ID字符串目前如下(如果您想查看每个时区ID的实际时间差异或十六进制索引,请点击上面的链接):
萨摩亚标准时间
阿拉斯加标准时间
山区标准时间
美国山区标准时间
加拿大中部标准时间
中美洲标准时间
美国东部标准时间
大西洋标准时间
南美太平洋标准时间
南美东部标准时间
格陵兰岛标准时间
亚述群岛标准时间
格林威治标准时间
中欧标准时间
罗马尼亚标准时间
西非中部标准时间
埃及标准时间
希腊标准时间
南非标准时间
阿拉伯标准时间
阿拉伯语标准时间
阿拉伯半岛标准时间
过渡期伊斯兰国家标准时间
西亚标准时间
尼泊尔标准时间
斯里兰卡标准时间
缅甸标准时间
北亚标准时间
新加坡标准时间
西澳大利亚标准时间
韩国标准时间
雅库茨克标准时间
中部澳大利亚标准时间
东澳大利亚标准时间
海参崴标准时间
中太平洋标准时间
新西兰标准时间
阿塞拜疆标准时间
约旦标准时间
墨西哥山区标准时间
纳米比亚标准时间
巴西中部标准时间
亚美尼亚标准时间
阿根廷标准时间
巴基斯坦标准时间
协调世界时
堪察加标准时间

3
一种将时区转换为另一种时区的方法:
DateTime n = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(datetime, "sourceTimeZoneId", "destinationTimeZoneId");

我使用Win10系统,并列出了时区ID时间差

Dateline Standard Time                  -12
UTC-11                                  -11
Hawaiian Standard Time                  -10
Aleutian Standard Time                  -9
Marquesas Standard Time                 -9
UTC-09                                  -9
Alaskan Standard Time                   -8
UTC-08                                  -8
Pacific Standard Time (Mexico)          -7
Pacific Standard Time                   -7
US Mountain Standard Time               -7
Mountain Standard Time (Mexico)         -6
Mountain Standard Time                  -6
Central America Standard Time           -6
Easter Island Standard Time             -6
Canada Central Standard Time            -6
Central Standard Time                   -5
Central Standard Time (Mexico)          -5
SA Pacific Standard Time                -5
Eastern Standard Time (Mexico)          -5
Eastern Standard Time                   -4
Haiti Standard Time                     -4
Cuba Standard Time                      -4
US Eastern Standard Time                -4
Turks And Caicos Standard Time          -4
Paraguay Standard Time                  -4
Venezuela Standard Time                 -4
Central Brazilian Standard Time         -4
SA Western Standard Time                -4
Pacific SA Standard Time                -4
Atlantic Standard Time                  -3
Tocantins Standard Time                 -3
E. South America Standard Time          -3
SA Eastern Standard Time                -3
Argentina Standard Time                 -3
Montevideo Standard Time                -3
Magallanes Standard Time                -3
Bahia Standard Time                     -3
Newfoundland Standard Time              -2
Greenland Standard Time                 -2
Saint Pierre Standard Time              -2
UTC-02                                  -2
Mid-Atlantic Standard Time              -1
Cape Verde Standard Time                -1
Azores Standard Time                    0
UTC                                     0
Greenwich Standard Time                 0
Sao Tome Standard Time                  0
GMT Standard Time                       +1
Morocco Standard Time                   +1
W. Central Africa Standard Time         +1
W. Europe Standard Time                 +2
Central Europe Standard Time            +2
Romance Standard Time                   +2
Central European Standard Time          +2
Egypt Standard Time                     +2
South Africa Standard Time              +2
Kaliningrad Standard Time               +2
Sudan Standard Time                     +2
Libya Standard Time                     +2
Namibia Standard Time                   +2
Jordan Standard Time                    +3
GTB Standard Time                       +3
Middle East Standard Time               +3
E. Europe Standard Time                 +3
Syria Standard Time                     +3
West Bank Standard Time                 +3
FLE Standard Time                       +3
Israel Standard Time                    +3
Arabic Standard Time                    +3
Turkey Standard Time                    +3
Arab Standard Time                      +3
Belarus Standard Time                   +3
Russian Standard Time                   +3
E. Africa Standard Time                 +3
Iran Standard Time                      +4
Arabian Standard Time                   +4
Astrakhan Standard Time                 +4
Azerbaijan Standard Time                +4
Russia Time Zone 3                      +4
Mauritius Standard Time                 +4
Saratov Standard Time                   +4
Georgian Standard Time                  +4
Volgograd Standard Time                 +4
Caucasus Standard Time                  +4
Afghanistan Standard Time               +4
West Asia Standard Time                 +5
Ekaterinburg Standard Time              +5
Pakistan Standard Time                  +5
Qyzylorda Standard Time                 +5
India Standard Time                     +5
Sri Lanka Standard Time                 +5
Nepal Standard Time                     +5
Central Asia Standard Time              +6
Bangladesh Standard Time                +6
Omsk Standard Time                      +6
Myanmar Standard Time                   +6
SE Asia Standard Time                   +7
Altai Standard Time                     +7
W. Mongolia Standard Time               +7
North Asia Standard Time                +7
N. Central Asia Standard Time           +7
Tomsk Standard Time                     +7
China Standard Time                     +8
North Asia East Standard Time           +8
Singapore Standard Time                 +8
W. Australia Standard Time              +8
Taipei Standard Time                    +8
Ulaanbaatar Standard Time               +8
Aus Central W. Standard Time            +8
Transbaikal Standard Time               +9
Tokyo Standard Time                     +9
North Korea Standard Time               +9
Korea Standard Time                     +9
Yakutsk Standard Time                   +9
Cen. Australia Standard Time            +9
AUS Central Standard Time               +9
E. Australia Standard Time              +10
AUS Eastern Standard Time               +10
West Pacific Standard Time              +10
Tasmania Standard Time                  +10
Vladivostok Standard Time               +10
Lord Howe Standard Time                 +10
Bougainville Standard Time              +11
Russia Time Zone 10                     +11
Magadan Standard Time                   +11
Norfolk Standard Time                   +11
Sakhalin Standard Time                  +11
Central Pacific Standard Time           +11
Russia Time Zone 11                     +12
New Zealand Standard Time               +12
UTC+12                                  +12
Fiji Standard Time                      +12
Chatham Islands Standard Time           +12
Kamchatka Standard Time                 +13
UTC+13                                  +13
Tonga Standard Time                     +13
Samoa Standard Time                     +13
Line Islands Standard Time              +14

获取时间差的代码:

DateTime dt = Convert.ToDateTime("2020-04-17T09:00:00");
Dictionary<string, int> zoneHour = new Dictionary<string, int>();
var infos = TimeZoneInfo.GetSystemTimeZones();
foreach (var info in infos)
{
    zoneHour.Add(info.Id,
        TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dt, "UTC", info.Id).Subtract(dt).Hours
    );
}

var zoneHourOrder = zoneHour.OrderBy(z => z.Value);
foreach (var kv in zoneHourOrder)
{
    Console.WriteLine(kv.Key.PadRight(40) + (kv.Value > 0 ? "+" + kv.Value : kv.Value.ToString()));
}

2

就像其他人所说,您可以通过迭代TimeZoneInfo.GetSystemTimeZones()来查找想要使用的字符串的列表。 话虽如此,如果您仅拥有有关时间差异(例如GMT +9或GMT-10)的信息,并且在迭代时区之后无法找到您的时区,则可能需要查看以下网址以查看您需要哪个时区https://msdn.microsoft.com/en-US/library/ms912391(v=winembedded.11).aspx


1

或者您可以像这样传递TimeZoneInfo.Local.Id

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id);
DateTime localDateTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi);

1
你可以使用以下代码。
using System;

namespace TimeZoneIds
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones())
                Console.WriteLine(z.Id);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接