TimezoneConverter - это легкая библиотека для быстрого конвертации между именами часовых поясов Iana, Windows и Rails.
Примечание. Отдельный пакет TimeZoneConverter.Posix
также доступен, если вам нужна поддержка часового пояса Posix.
TimeZoneConverter
Nuget.TimeZoneConverter
, где это необходимо. На версии 6.0.0 TimezoneConverter работает со всеми следующими:
.NET Framework версии менее 4,6,2 больше не поддерживаются.
.NET 6 имеет встроенную поддержку для IANA и Windows Time Conties в кроссплатформенном виде, что несколько снижает необходимость в этой библиотеке. Он опирается на интеграцию ICU .NET для выполнения этой функциональности. Смотрите блог .NET для деталей.
Повторно, если вы нацелены только на .net 6 (или выше), и у вас есть либо предоставленная платформа, либо приложная ICU, вам , возможно, не нужно использовать эту библиотеку. Тем не менее, это действительно все еще поддерживается, и многие обнаружили, что он продолжает быть полезным в определенных средах или на конкретных платформах.
TimezoneConverter не имеет внешних зависимостей данных во время выполнения. Все данные, которые им нужны, встроены в саму библиотеку.
Некоторые функции в TimezoneConverter, такие как TZConvert.GetTimeZoneInfo
полагаются на основной объект TimeZoneInfo
, имеющий доступ к данным часовой зоны операционной системы. В Windows эти данные поступают из реестра и поддерживаются через обновления Windows.
На OSX и Linux эти данные поступают из распределения базы данных IANA TOMEZE, обычно через пакет tzdata
. Если в вашей среде нет установленного пакета tzdata
, вам нужно будет установить его для TZConvert.GetTimeZoneInfo
для правильной работы.
Например, изображения Alpine Linux Docker для .NET Core больше не отправляются с tzdata
. См. Dotnet/Dotnet-Docker#1366 для инструкций о том, как добавить его в изображения Docker.
Эта библиотека использует комбинацию источников данных для достижения своих целей:
MAPPING
от ActiveSupport::TimeZone
в исходном коде Rails.Обычно последнее зарезервировано для краевых случаев и для вновь введенных зон, которые могли или не могли быть опубликованы в официальных источниках.
ВАЖНО: Поскольку эти данные могут меняться, когда из любого из этих источников вводятся новые часовые пояса, рекомендуется всегда использовать наиболее текущую пересмотр и регулярно проверять обновления.
Кроме того, эта библиотека не пытается определить, присутствуют ли предоставленные идентификаторы часового пояса на компьютере, где работает код. Предполагается, что компьютер сохраняется актуально с обновлениями часовых поясов.
Например, если кто -то пытается преобразовать Africa/Khartoum
в идентификатор часового пояса Windows, они получат Sudan Standard Time
. Если он используется на компьютере Windows, на котором еще не установлен KB4051956
(который создал этот часовой пояс), они, вероятно, получат TimeZoneNotFoundException
.
Для зоны можно быть непоколебимой - это означает, что нет логического эквивалента от одного типа часового пояса к другому.
В настоящее время существует только одна зона Яны, которая не поддается Windows, которая является Antarctica/Troll
. Другими словами, нет «правильного» часового пояс для пользователей Windows, которые могут быть размещены на станции Тролль, Антарктида. Поэтому, если вы попытаетесь преобразовать Antarctica/Troll
в Windows, вы получите TimeZoneNotFoundException
.
Есть много зон, которые невозможны для рельсов. Полный список находится в модульном тестовом коде здесь.
Преобразуйте название часового пояса Iana в лучший идентификатор часового пояса Windows.
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"
Преобразуйте название часового пояса Windows в наиболее подходящее название Iana Time Zone.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"
Преобразуйте название часового пояса Windows в наиболее подходящее название Iana Time Zone, в отношении конкретной страны.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto"
Получите объект TimeZoneInfo
от .NET Core, независимо от того, на какой ОС вы используете:
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;
Превратите название часового пояса Rails в лучшее название Iana Time Ray.
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"
Преобразуйте название часового пояса Rails в лучший идентификатор часового пояса Windows.
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
Преобразуйте название часового пояса Iana в одно или несколько имен часовых поясов Rails.
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
Преобразуйте идентификатор часового пояса Windows в один или несколько имен часовых поясов Rails.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
Есть несколько дополнительных помощников, которые вы можете найти полезным.
Эти свойства предоставляют списки различных типов часовых поясов, известных этой библиотеке:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
Если вам нужен список часовых поясов, которые применимы в данном регионе, вы можете использовать:
TZConvert.GetIanaTimeZoneNamesByTerritory()
Эта библиотека предоставляется бесплатно, в соответствии с условиями лицензии MIT.