Как получить страну, используя часовой пояс IANA или объект часового пояса в C# - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь получить страну одним из следующих способов. У меня есть часовой пояс, идентификатор часового пояса и информация о часовом поясе, приведенная ниже. Если это возможно, чтобы получить страну, пожалуйста, помогите мне.

Результат IANA: Азия / Калькутта
windows: Стандартное время Индии
TimeZoneInfo: {(UTC + 05: 30) Ченнаи, Калькутта, Мумбаи, Нью-Дели}

результат: IND Индия

1 Ответ

3 голосов
/ 24 января 2020

Мой Проект Noda Time может предоставить информацию о местоположении, которая есть в базе данных IANA, если таковая имеется. Вот пример кода с использованием базы данных IANA по умолчанию, встроенной в Noda Time. Вы также можете загрузить определенную c версию данных из файла NZD - мы предоставляем новые файлы NZD каждый раз, когда появляется новый выпуск данных IANA.

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 для Индии.

...