2014-09-14 7 views
19

Im Moment benutze ichPython erhalten aktuelle Zeit in der richtigen Zeitzone

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

die aktuelle Uhrzeit als Zeichenfolge angezeigt werden soll.
Problem ist, mein Computer läuft in Europe/Berlin Zeitzone, und der Offset von +2 zu UTC wird hier nicht berücksichtigt. Statt 19:22:26 sollte angezeigt werden 21:22:26 auch anders als die anderen Antworten, die ich hier gefunden, speichere ich es nicht durch den Aufruf

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

aber

datetime.datetime.now() 

so habe ich versucht (und nicht) die folgende :

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

das ist es, großartig! – luckydonald

+0

Willst du es beantworten, also kann ich akzeptieren? – luckydonald

+0

Sicher, könnte jemand anderen nützlich sein –

Antwort

41

Um die aktuelle Zeit in der lokalen Zeitzone als naives Datetime-Objekt zu erhalten:

from datetime import datetime 
naive_dt = datetime.now() 

Wenn die erwartete Zeit nicht angezeigt wird, bedeutet dies, dass Ihr Computer falsch konfiguriert ist. Sie sollten es zuerst beheben (es hat nichts mit Python zu tun).

Um die aktuelle Zeit in UTC als naive Datetime-Objekt zu erhalten:

naive_utc_dt = datetime.utcnow() 

Um die aktuelle Zeit als bewusst Datetime-Objekt in Python zu erhalten 3.3+:

from datetime import datetime, timezone 

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

den Strom zu erhalten Zeit in der angegebenen Zeitzone von der tz-Datenbank:

import pytz 

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

Es funktioniert während DST-Übergängen. Es funktioniert, wenn die Zeitzone in der Vergangenheit einen unterschiedlichen UTC-Offset hatte, d. H., Es funktioniert sogar, wenn die Zeitzone mehreren tzinfo-Objekten zu unterschiedlichen Zeiten entspricht.

Verwandte Themen