Получить смещение UTC из временной зоны

Рейтинг: 0Ответов: 1Опубликовано: 16.08.2023

От гео API ко мне приходит часовой пояс в формате регион/город, в информации о пользователе я хочу хранить именно UTC offset типа int, как это можно сделать?

Пример:

Для Europe/Moscow нужно получить значение 3, для Mexico/BajaNorte - значение -8

Ответы

▲ 1Принят

Метод TimeZoneInfo.FindSystemTimeZoneById

Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("Europe/Moscow").BaseUtcOffset); // 03:00:00
Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("Mexico/BajaNorte").BaseUtcOffset); // -08:00:00

Также если вы запускаете это в докер контейнере, нужно дополнительно проверить что ICU библиотека установлена Remarks:

On Windows systems, FindSystemTimeZoneById tries to match id to the subkey names of the HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones branch of the registry. On Linux and macOS, it uses time zone information available in the ICU Library.

В дефолтном Debian-based образе она должна уже быть установлена.