简体   繁体   English

如何在 C# 中使用 IANA 时区或时区对象获取国家/地区

[英]How to get country using IANA timezone or timezone object in C#

I'm trying to get the country from one of the following ways.我正在尝试通过以下方式之一获取该国家/地区。 I have timezone, timezone id and timezone info given below.我有下面给出的时区、时区 ID 和时区信息。 If this is possible to get the country, please help me out.如果这个可以搞定呀,请帮帮我。

IANA result: Asia/Kolkata IANA 结果:亚洲/加尔各答
windows: India Standard Time窗口:印度标准时间
TimeZoneInfo: {(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi} TimeZoneInfo: {(UTC+05:30) 金奈、加尔各答、孟买、新德里}

result: IND India结果: IND 印度

My Noda Time project can provide the location information that is in the IANA database, if there is any.我的Noda Time 项目可以提供 IANA 数据库中的位置信息(如果有的话)。 Here's some sample code, using the default IANA database that's embedded in Noda Time.下面是一些示例代码,使用 Noda Time 中嵌入的默认 IANA 数据库。 You can also load a specific version of the data from an NZD file - we provide new NZD files every time there's a new IANA data release.您还可以从 NZD 文件加载特定版本的数据 - 每次发布新的 IANA 数据时,我们都会提供新的 NZD 文件。

using NodaTime.TimeZones;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        DisplayCountryInfo("Europe/London");
        DisplayCountryInfo("Asia/Kolkata");
    }

    static void DisplayCountryInfo(string id)
    {
        var source = TzdbDateTimeZoneSource.Default;
        Console.WriteLine($"ID: {id}");
        if (!source.GetIds().Contains(id))
        {
            Console.WriteLine("ID not found. Aborting");
            Console.WriteLine();
            return;
        }

        var canonicalId = source.CanonicalIdMap[id];
        Console.WriteLine($"Canonical ID: {canonicalId}");
        var location = source.ZoneLocations.FirstOrDefault(loc => loc.ZoneId == canonicalId);
        if (location is null)
        {
            Console.WriteLine($"No location found.");
        }
        else
        {
            Console.WriteLine($"Country: {location.CountryName}");
            Console.WriteLine($"Code: {location.CountryCode}");
        }
        Console.WriteLine();
    }
}

Output:输出:

ID: Europe/London
Canonical ID: Europe/London
Country: Britain (UK)
Code: GB

ID: Asia/Kolkata
Canonical ID: Asia/Kolkata
Country: India
Code: IN

Note that the code is "IN" rather than "IND";注意代码是“IN”而不是“IND”; "IN" is the ISO-3166 country code for India. “IN”是印度的 ISO-3166 国家/地区代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM