如何从TimeZoneInfo获取国家名称

时间:2018-09-05 10:33:05

标签: c# timezone

如果拥有DataLoader,我们如何获取所选时区的国家/地区名称。

示例:

TimeZoneInfo

谢谢

1 个答案:

答案 0 :(得分:1)

我认为没有内置的方法可以做到这一点。 TimeZoneInfo类没有返回国家代码的属性或方法。参见:https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo?view=netframework-4.7.2

TimeZoneInfo的行为还取决于其运行的操作系统。见下文:

在Windows 10的NET Core 2.1上运行以下代码:

TimeZoneInfo localZone = TimeZoneInfo.Local;
Console.WriteLine("Local Time Zone ID: {0}", localZone.Id);
Console.WriteLine("   Display Name is: {0}.", localZone.DisplayName);
Console.WriteLine("   Standard name is: {0}.", localZone.StandardName);
Console.WriteLine("   Daylight saving name is: {0}.", localZone.DaylightName);

给出输出:

Local Time Zone ID: Central Europe Standard Time
Display Name is: (UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague.
Standard name is: Central Europe Standard Time.
Daylight saving name is: Central Europe Summer Time.

在macOS High Sierra上运行相同的代码NET Core 2.1:

Local Time Zone ID: Europe/Budapest
Display Name is: GMT+01:00.
Standard name is: GMT+01:00.
Daylight saving name is: GMT+02:00.

您可以实现的最接近的近似值是:

  1. 下载tz数据库的最新副本。您可以使用https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

  2. 下载国家/地区代码的副本。维基百科有一个列表:https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

  3. 按TZ名称(例如“欧洲/布达佩斯”)搜索TZ数据库的实现代码。这给您一个国家代码。然后使用两个字母的国家/地区代码搜索国家/地区数据库,这将为您提供一个国家/地区名称。

此方法不能跨平台!当国家/地区代码列表的tz数据库发生更改时,必须更新您的应用程序。