Pisząc aplikację na ogół chcemy, żeby panował porządek w zmiennych typu datetype. Opieranie się na czasach lokalnych serwera na którym uruchomiona jest aplikacja i serwera bazy danych może prowadzić do bałaganu w najlepszym razie, kiedy strefy czasowe tych serwerów nie są zgodne a co gorsza inne niż strefa czasowa w której funkcjonują użytkownicy aplikacji. Warto więc zadbać o odpowiednią konfigurację.
Domyślnie aplikacja napisana w Django ustawiała zmienną TIME_ZONE, odpowiedzialną za definicję lokalnej strefy czasowej na ‘America/Chicago’, domyślnie, czyli jeśli nie zostało to zmienione w ustawieniach czyli w pliku settings.py. W nowszych wersjach Django w pliku settings.py znajdziemy już wpis:
TIME_ZONE = 'UTC'
To już lepiej, jednak ta wartość może się mieć nijak do strefy czasowej lokalnej dla użytkowników aplikacji. A bywa, że rejestrowanie czasu jakiejś akcji (komentarz, wpis do bloga etc) jest jednak ważne. Warto więc zdefiniować tę wartość prawidłowo. Dla Polski wartość przesunięcia w stosunku do UTC wynosi 1 co oznacza się na ogół przez ‘UTC+1’ lub ‘UTC+01’, wartości dla innych krajów można sprawdzić w Wikipedii
Oczywiście to by było za łatwe, żeby można było napisać po prostu:
TIME_ZONE = 'UTC+01'
Należy użyć wartości znanej jako TZ database name, znajdziemy ją w tej samej tabeli w Wikipedii. Zatem dla naszej szerokości geograficznej możliwe są między innymi ustawienia:
TIME_ZONE = 'Africa/Algiers' TIME_ZONE = 'CET' //zdeprecjonowany TIME_ZONE = 'Etc/GMT-1' TIME_ZONE = 'Europe/Warsaw' TIME_ZONE = 'MET' //zdeprecjonowany
Należy pamiętać jeszcze o jednej kwestii. Samo nadanie nadanie wartości zmiennej TIME_ZONE nie przyniesie rezultatów i aplikacja będzie korzystać z czasu lokalnego serwera, który może być zupełnie inny niż strefa, którą chcemy ustawić, dopóki nie wymusimy korzystania ze zmiennej TIME_ZONE za pomocą ustawienia:
USE_TZ = True
Należy więc dopilnować, żeby i ta zmienna miała odpowiednią wartość.
I to właściwie wszystko co należy zrobić, żeby metoda datetime.datetime.now() zwracała prawidłową wartość.
Dzięki. Przydatne.