2014-09-14 13 views
19

Teraz używamPython uzyskać aktualny czas w prawym strefy czasowej

import datetime 
print(datetime.datetime.now().strftime("%X")) 

wyświetlać aktualny czas jako ciąg znaków.
Problem polega na tym, że mój komputer działa w strefie czasowej Europe/Berlin, a przesunięcie od +2 do UTC nie jest tutaj uwzględniane. Zamiast 19:22:26 powinien wyświetlać 21:22:26 różni także do innych odpowiedzi znalazłem tutaj, nie przechowywać go przez wywołanie

datetime.datetime(2014, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>) 

ale

datetime.datetime.now() 

więc próbowałem (i nie), następujące :

>>> from pytz import timezone 
>>> datetime.datetime.now().astimezone(timezone('Europe/Berlin')) 
ValueError: astimezone() cannot be applied to a naive datetime 
+0

To wszystko, świetnie! – luckydonald

+0

Czy chcesz na nie odpowiedzieć, abym mógł zaakceptować? – luckydonald

+0

Jasne, może być przydatne dla kogoś innego –

Odpowiedz

41

Aby uzyskać aktualny czas w lokalnej strefie czasowej jako naiwny obiekt datetime:

from datetime import datetime 
naive_dt = datetime.now() 

Jeśli nie zwróci oczekiwanego czasu, oznacza to, że komputer jest źle skonfigurowany. Najpierw powinieneś to naprawić (nie ma to związku z Pythonem).

Aby uzyskać aktualny czas w UTC jako naiwnego obiektu datetime:

naive_utc_dt = datetime.utcnow() 

Aby uzyskać aktualny czas jako świadomy obiektu datetime w Pythonie 3.3+:

from datetime import datetime, timezone 

utc_dt = datetime.now(timezone.utc) # UTC time 
dt = utc_dt.astimezone() # local time 

Aby uzyskać aktualny czas w podanej strefie czasowej z bazy danych tz:

import pytz 

tz = pytz.timezone('Europe/Berlin') 
berlin_now = datetime.now(tz) 

Działa podczas przejść DST. Działa, jeśli strefa czasowa miała w przeszłości inne przesunięcie UTC, to znaczy działa nawet wtedy, gdy strefa czasowa odpowiada różnym obiektom tzinfo w różnych momentach.

Powiązane problemy