Проблема с приложением, зависящим от британского летнего времени в Azure - PullRequest
2 голосов
/ 20 мая 2011

Часть локального приложения, которое я перемещаю в облако, отображает информацию о ТВ-планировании из источника json. Базовые данные используют смещение в секундах от даты начала, чтобы получить время начала, которое хорошо, так как все они в формате UTC.

Проблема возникает при движении к облаку.

Приложение, размещенное в помещении, было расположено в Великобритании, поэтому языковой стандарт - UntedKingdom, и время показа телевизора было правильно выведено с использованием

return programmeStart.AddHours(programmeStart.IsDaylightSavingTime() ? 1 : 0);

Однако, теперь, после перемещения в облако, функциональность IsDaylightSavingTime больше не возвращает значение true из-за того, что центры обработки данных являются BST Agnostic.

Я ломал голову над тем, как попытаться разобраться в этом.

Существует ли быстрый и простой способ указать, под каким языком работает ваша размещаемая служба в Azure, или это лучшее решение для создания метода расширения, который считывает границы, когда BST запускается от и до, а затем возвращает истину или ложь оттуда, например

public static class DateTimeExtension
{
  public static bool IsMyDaylightSavingTime(this DateTime timeToTest)
  {
    if(timeToTest >= GetConfig("bstStart") && timeToTest <= GetConfig("bstFinish"))
    {
      return true;
    }

    return false;
  }
}

А значения конфигурации bst меняются при их изменении?

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 мая 2011

Вы не можете изменить часовой пояс серверов Azure - происходит много событий, предполагающих, что UTC является текущей настройкой.

Вы должны быть в состоянии получить информацию о часовом поясе Великобритании по строке, например ::100100

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");

После того, как вы это сделаете, вы можете использовать метод фреймворка TimeZoneInfo.IsDaylightSavingTime http://msdn.microsoft.com/en-us/library/bb460642.aspx

tzi.IsDaylightSavingTime(DateTime.Now);
1 голос
/ 20 мая 2011

Почему вы не можете просто вернуть UTC и позволить клиенту перевести это в соответствии со своей локалью?

Редактировать: вот код

var offset = TimeZoneInfo.GetSystemTimeZones()
.Where(z => z.Id == "GMT Standard Time")
.Single()
.GetUtcOffset(DateTime.UtcNow)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...