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 🙂