У меня есть сценарий, в котором у меня есть смещение по часовой стрелке (в минутах), и вам нужно определить часовой пояс для него. Я знаю, что все данные недоступны (например, может быть несколько часовых поясов со смещением -240 минут), но приемлемо "лучшее предположение".
Мой первый проход выглядел так:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Эта сортировка работает, но мне нужно учитывать дневные сбережения, которые меня отбрасывают. Я добавил этот ужасный взлом:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
var extra = info.IsDaylightSavingTime(DateTime.Now) ? 60 : 0;
if (info.BaseUtcOffset.TotalMinutes + extra == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Это работает "достаточно хорошо" в том, что я могу показать пользователю правильное время для них, когда переход на летнее время не действует, а во время DST около 70%. Тем не менее... это какой-то ужасный код для моих глазных яблок.
Есть ли лучший способ сделать это? Более элегантность была бы хорошей, и больше точности было бы еще лучше.
Обновление
Технически у меня есть доступ к любой информации, которую Javascript может получить относительно даты. У меня есть страница, на которой я разместил скрытое поле под названием "offset". У меня есть функция JQuery, которая заполняет поле смещения DateTime(). GetTimezoneOffset(). Хотя я ничего не вижу в объекте DateTime, который поможет, возможно, это откроет другие возможности для идей.