簡體   English   中英

如何在 C# 中使用 IANA 時區或時區對象獲取國家/地區

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

我正在嘗試通過以下方式之一獲取該國家/地區。 我有下面給出的時區、時區 ID 和時區信息。 如果這個可以搞定呀,請幫幫我。

IANA 結果:亞洲/加爾各答
窗口:印度標准時間
TimeZoneInfo: {(UTC+05:30) 金奈、加爾各答、孟買、新德里}

結果: IND 印度

我的Noda Time 項目可以提供 IANA 數據庫中的位置信息(如果有的話)。 下面是一些示例代碼,使用 Noda Time 中嵌入的默認 IANA 數據庫。 您還可以從 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();
    }
}

輸出:

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

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

注意代碼是“IN”而不是“IND”; “IN”是印度的 ISO-3166 國家/地區代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM