Azure Websites i czas lokalny

Piszę aktualnie małą aplikację webową w ASP.NET, która będzie używana jedynie w Polsce. Postanowiłem ustawić na sztywno kulturę polską, aby wszystkie daty wskazywały na właściwą godzinę. Najprościej jest to zrobić dodając wpis globalization  w web.config, co też uczyniłem.

Po uruchomieniu aplikacji na Azure Websites zauważyłem, że datą lokalną wciąż jest UTC. Szybka poprawka na ustawianie kultury podczas uruchamiania aplikacji przez nadpisywanie CurrentCulture i CurrentUICulture w aktualnym wątku, deploy i znów nic. Co jeszcze dziwniejsze, kultura aplikacji była ustawiona na polską, ale daty lokalne dalej były pobierane z UTC. Tutaj już zacząłem trochę wątpić w swoje umiejętności, ale szybki research w Google pokazał prawdziwy powód moich problemów.

Azure Websites domyślnie zwracają godzinę UTC i nie można tego zmienić przez wyżej opisane metody. Istnieją 2 rozwiązania:

  • Wpis w ustawieniach witryny na portalu Azure WEBSITE_TIME_ZONE z wartością Central European Standard Time – link
  • Każdorazowa konwersja dat do lokalnej przez zabawy z klasą TimeZoneInfo – link

Pierwszy jest dobry, gdy chcemy ustawić na sztywno datę lokalną w całej aplikacji, drugiego będziemy używali w bardziej multikulturowej aplikacji. Użyłem więc pierwszego sposobu i mam już aktualną datę na Azure 🙂