什么值我应该传递到TimeZoneInfo.FindSystemTimeZoneById(字符串)
本文关键字:FindSystemTimeZoneById 字符串 TimeZoneInfo 我应该 什么 | 更新日期: 2023-09-27 17:50:41
我想使用TimeZoneInfo.FindSystemTimeZoneById(String)
方法,但我不知道使用什么值作为输入?
我在哪里可以得到FindSystemTimeZoneById
所需的id
值列表?
这是Windows 8中的列表(我从Windows注册表中提取)
<>之前阿富汗标准时间阿拉斯加标准时间阿拉斯加标准时间'动态夏时制阿拉伯标准时间阿拉伯标准时间阿拉伯标准时间阿拉伯标准时间'动态夏令时阿根廷标准时间阿根廷标准时间'动态夏时制大西洋标准时间大西洋标准时间'动态夏时制澳大利亚中央标准时间澳大利亚东部标准时间澳大利亚东部标准时间'动态夏时制阿塞拜疆标准时间亚速尔标准时间亚速尔群岛标准时间'动态夏时制巴伊亚标准时间巴伊亚州标准时间'动态夏时制孟加拉国标准时间孟加拉国标准时间'动态夏时制加拿大中央标准时间佛得角标准时间高加索标准时间高加索标准时间'动态夏令时岑。澳大利亚标准时间岑。澳大利亚标准时间'动态夏时制中美洲标准时间中亚标准时间巴西中部标准时间巴西中部标准时间'动态夏时制中欧标准时间中欧标准时间中太平洋标准时中央标准时间中央标准时间'动态夏令时中央标准时间(墨西哥)中国标准时间日期线标准时间东非标准时间E.澳大利亚标准时间E.欧洲标准时间E.南美标准时间E.南美标准时间'动态夏时制东部标准时间东部标准时间'动态夏时制埃及标准时间埃及标准时间'动态夏令时叶卡捷琳堡标准时间叶卡捷琳堡标准时间'动态夏时制斐济标准时间斐济标准时间'动态夏时制文件标准时间格鲁吉亚标准时间格林尼治标准时间格陵兰标准时间格陵兰标准时间'动态夏时制格林尼治标准时间GTB标准时间夏威夷标准时间印度标准时间伊朗标准时间伊朗标准时间'动态夏令时以色列标准时间以色列标准时间'动态夏令时约旦标准时间约旦标准时间'动态夏时制加里宁格勒标准时间加里宁格勒标准时间'动态夏时制堪察加标准时间韩国标准时间利比亚标准时间利比亚标准时间'动态夏令时马加丹标准时间马加丹标准时间'动态夏时制毛里求斯标准时间毛里求斯标准时间'动态夏令时大西洋中部标准时间中东标准时间中东标准时间'动态夏时制蒙得维的亚标准时间蒙得维的亚标准时间'动态夏令时摩洛哥标准时间摩洛哥标准时间'动态夏时制山区标准时间山地标准时间'动态夏时制山区标准时间(墨西哥)缅甸标准时间中亚标准时间N.中亚标准时间'动态夏时制纳米比亚标准时间纳米比亚标准时间'动态夏时制尼泊尔标准时间新西兰标准时间新西兰标准时间'动态夏时制纽芬兰标准时间纽芬兰标准时间'动态夏令时北亚东部标准时间北亚东部标准时间'动态夏时制北亚标准时间北亚标准时间'动态夏时制太平洋南太平洋标准时间太平洋南岸标准时间'动态夏时制太平洋标准时间太平洋标准时间'动态夏时制太平洋标准时间(墨西哥)巴基斯坦标准时间巴基斯坦标准时间'动态夏时制巴拉圭标准时间巴拉圭标准时间'动态夏时制标准时间俄罗斯标准时间俄罗斯标准时间'动态夏令时美国东部标准时间南太平洋标准时间南澳西部标准时间萨摩亚标准时间萨摩亚标准时间'动态夏时制东南亚标准时间新加坡标准时间南非标准时间斯里兰卡标准时间叙利亚标准时间叙利亚标准时间'动态夏令时台北标准时间塔斯马尼亚标准时间塔斯马尼亚标准时间'动态夏时制东京标准时间汤加标准时间土耳其标准时间土耳其标准时间'动态夏令时乌兰巴托标准时间美国东部标准时间美国东部标准时间'动态夏令时美国山区标准时间UTCUTC + 12UTC-02UTC-11委内瑞拉标准时间委内瑞拉标准时间'动态夏时制符拉迪沃斯托克标准时间符拉迪沃斯托克标准时间'动态夏时制澳大利亚标准时间澳大利亚标准时间/动态夏时制中非标准时间欧洲标准时间西亚标准时间西太平洋标准时间雅库茨克标准时间雅库茨克标准时间'动态夏时制可以从TimeZoneInfo
类的静态列表中获取
var infos = TimeZoneInfo.GetSystemTimeZones();
foreach (var info in infos)
{
Console.WriteLine(info.Id);
}
的例子:
var tzInfo = TimeZoneInfo.FindSystemTimeZoneById("New Zealand Standard Time");
或者如果你只是想要一个时区id的列表,就像DJ KRAZE建议的
var timeZoneIds = TimeZoneInfo.GetSystemTimeZones().Select(t => t.Id);
可用的时区有:
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
看看TimeZoneInfo
上称为TimeZoneInfo.GetSystemTimeZones()
方法的静态方法。
这将从注册表返回操作系统上所有TimeZoneInfo
的列表。它们都存储在:HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows NT'CurrentVersion'Time Zones
下。
一个例子是"都柏林,爱丁堡,里斯本,伦敦"时区的"GMT标准时间"。
要获取最新的时区列表,请使用Windows中的tziztil:
tzutil/l
你可以在MSDN中找到微软的官方时区id列表:https://learn.microsoft.com/en-us/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
最新的Microsoft文档,以及这些文档的列表,可以在https://support.microsoft.com/en-gb/help/973627/microsoft-time-zone-index-values
找到时区ID字符串目前如下(如果你想看到实际的时差看到十六进制索引为每个时区ID然后点击上面的链接):
萨摩亚标准时间
阿拉斯加标准时间
山区标准时间
美国山区标准时间
加拿大中部标准时间
中美洲标准时间
美国东部标准时间
大西洋标准时间
太平洋标准时间
E。南美洲标准时间
格陵兰标准时间
亚速尔群岛标准时间
GMT标准时间
中欧标准时间
浪漫标准时间
W。中部非洲标准时间
埃及标准时间
GTB标准时间
南非标准时间
阿拉伯标准时间
阿拉伯标准时间
阿拉伯标准时间
过渡时期阿富汗伊斯兰国标准时间
西亚标准时间
尼泊尔标准时间
斯里兰卡标准时间
缅甸标准时间
北亚标准时间
新加坡标准时间
W。澳大利亚标准时间
韩国标准时间
雅库茨克标准时间
岑。澳大利亚标准时间
E。澳大利亚标准时间
海参崴标准时间
太平洋中部标准时间
新西兰标准时间
阿塞拜疆标准时间
约旦标准时间
山区标准时间(墨西哥)
纳米比亚标准时间
巴西中部标准时间
亚美尼亚标准时间
阿根廷标准时间
巴基斯坦标准时间
UTC堪察加标准时间
从一个时区转换到另一个时区的方法:
DateTime n = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(datetime, "sourceTimeZoneId", "destinationTimeZoneId");
我在Win10上,我列出Time Zone Id
与time difference
:
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()));
}
就像其他人说的,您可以通过迭代TimeZoneInfo.GetSystemTimeZones()
来找到您想要使用的字符串。也就是说,如果您只有关于时差的信息(如GMT+9或GMT-10),并且在遍历时区后找不到您的时区,那么您可能需要查看以下url,以了解您需要哪个时区https://msdn.microsoft.com/en-US/library/ms912391(v=winembedded.11).aspx
或者您可以像这样传递TimeZoneInfo.Local.Id
:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id);
DateTime localDateTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi);
您可以使用下面的代码
using System;
namespace TimeZoneIds
{
class Program
{
static void Main(string[] args)
{
foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones())
Console.WriteLine(z.Id);
}
}
}
我应该传入什么值TimeZoneInfo.FindSystemTimeZoneById(字符串)?
答案是视情况而定。Windows和MacOS/Linux有不同的id。
我在哪里可以得到所需的id值列表FindSystemTimeZoneById吗?
我认为MacOS/Linux使用IANA id,你可以在NodaTime文档中找到,或者我猜你可以在IANA官方文档的某个地方找到它们。对于Windows id,请查看Microsoft时区索引值
例子在我的Macbook上运行下面的代码是好的var europeSthlm = TimeZoneInfo.FindSystemTimeZoneById("Europe/Stockholm");
而运行var wEuropeStdTime = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
会抛出System.TimeZoneNotFoundException: The time zone ID 'W. Europe Standard Time' was not found on the local computer.
进一步阅读
在这里你可以看到你如何可以检索一个时区列表使用NodaTime,以及如何获得在Windows和Mac上的id分别:https://stackoverflow.com/a/19697827/2874896