Мой Проект 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 для Индии.