Azure

Azure Websites i czas lokalny

2016-02-28

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 :)


Comments:

dotnetomaniak.pl - Feb 0, 2016

Azure Websites i czas lokalny – RadBlog

Dziękujemy za dodanie artykułu - Trackback z dotnetomaniak.pl

mdymel - Feb 1, 2016

Ja jestem zdania, że lepiej zawsze używać dat w UTC, a konwersję do strefy czasowej robić dopiero po stronie klienta. Po pierwsze rzadko kiedy można mieć 100% pewności, że kod będzie używany w jednym kraju, a po drugie znacznie ułatwia to np. współpracę z dwiema bazami danych, które mogą różnie na to patrzeć. ;-) Używając UTC mam pewność, że nie będę mial problemów z datami.

Radosław Maziarka - Feb 1, 2016

Nie lubię słów ‘zawsze’ / ‘nigdy’ - jeśli piszemy aplikację którą używamy przez 1 dzień a później o niej zapominamy to po co się trudzić z takim strzelaniem z armaty do komara?

mdymel - Feb 1, 2016

W imię zasad ;-) Jeśli jeden dzień to może tak, ale wydaje mi się, że czasem może być nawet prościej na serwerze trzymać UTC (brak stref czasowych, zmian na letni/zimowy), a na czas użytkownika konwersję robić na końcu

Andrzej - Mar 2, 2016

Czy ten pierwszy sposób uwzględnia automatyczną zmianę czasu na CEST w miesiącach letnich?

Radosław Maziarka - Mar 2, 2016

O widzisz, ciekawa kwestia. Zakładam że nie, trzeba by ręcznie zmieniać tą wartość na Azure.

comments powered by Disqus