2013-03-28 5 views
15

Ich habe ein Datum, das ich bauen will:Python: datetime Tzinfo Dokumentation Namen Zeitzone

from datetime import datetime 
from datetime import tzinfo 
test = '2013-03-27 23:05' 
test2 = datetime.strptime(test,'%Y-%m-%d %H:%M') 
>>> test2 
datetime.datetime(2013, 3, 27, 23, 5) 

>>> test2.replace(tzinfo=EST) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'EST' is not defined 

>> test2.replace(tzinfo=UTC) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'UTC' is not defined 

ich keine Dokumentation auf der Liste der Zeitzone finden names, die ich vergeben kann im replace.tzinfo= Aufruf Tzinfo.

Ich habe durch das Lesen folgende und es gibt nichts:

http://docs.python.org/2/library/datetime.html#tzinfo-objects

Ich habe auch in Google gesucht.

bearbeiten: Ich folgte der Lösung von unutbu zur Verfügung gestellt, aber ich bekomme die folgende:

>>> test = '2013-03-27 00:05' 
>>> test 
'2013-03-27 00:05' 

>>> test2 = dt.datetime.strp(test, '%Y-%m-%d %H:%M') 
>>> test2 
datetime.datetime(2013, 3, 27, 0, 5) 

>>> est = pytz.timezone('US/Eastern') 
>>> utc = pytz.utc 
>>> print(est.localize(test2)) 
2013-03-27 00:05:00-04:00 
>>> print(utc.localize(test2)) 
2013-03-27 00:05:00+00:00 

>>> print(est.localize(test2,is_dst=False)) 
2013-03-27 00:05:00-04:00 
>>> print(est.localize(test2,is_dst=True)) 
2013-03-27 00:05:00-04:00 
>>> 

Wie Sie selbst sehen können, wenn ich die is_dst liefern = Flag die noch Offset ‚-04: 00‘ , das ist EDT und nicht EST. Ich schätze die Hilfe. Vielen Dank.

Die Dokumentation zeigt folgendes:

Wenn Sie mit lokalen Zeiten auf Arbeit bestehen, diese Bibliothek bietet die Möglichkeit, sie eindeutig Konstruktion:

>>> loc_dt = datetime(2002, 10, 27, 1, 30, 00) >>> est_dt = eastern.localize(loc_dt, is_dst=True) >>> edt_dt = eastern.localize(loc_dt, is_dst=False) >>> print(est_dt.strftime(fmt) + '/' + edt_dt.strftime(fmt)) 2002-10-27 01:30:00 EDT-0400/2002-10-27 01:30:00 EST-0500 

östlichen definiert wurde früher in der http://pytz.sourceforge.net/#problems-with-localtime

Dokumentation als eastern = timezone('US/Eastern')

Dies scheint darauf hinzuweisen, dass die is_dst= flag sollte weiter spezifizieren, ob Tageslichtersparnis spezifiziert ist oder nicht. Ich würde gerne wissen, warum das in meinem Fall nicht funktioniert.

+0

ich einen Fehler bekam, als ich schon versucht, diese ausgeführt wird: 'Attribute:‚Modul‘Objekt hat kein Attribut ' strptime''. Sind Sie sicher, dass Sie den Code korrekt kopiert haben? – Moshe

+0

oops. Haben Sie datetime und tzinfo importiert? Ich werde meinen ursprünglichen Post bearbeiten, um das zu berücksichtigen. – codingknob

+0

Mein Fehler, ich hatte 'datetime' importiert, nicht' datetime.datetime'. Vielen Dank! – Moshe

Antwort

23

Die Standardbibliothek definiert keine Zeitzonen - zumindest nicht gut (das Spielzeugbeispiel in the documentation behandelt keine subtilen Probleme wie die mentioned here). Verwenden Sie für vordefinierte Zeitzonen den Drittanbieter pytz module.

import pytz 
import datetime as DT 

eastern = pytz.timezone('US/Eastern') 
utc = pytz.utc 
test = '2013-03-27 23:05' 

Dies ist eine "naive" Datetime:

test2 = DT.datetime.strptime(test, '%Y-%m-%d %H:%M') 
print(test2) 
# 2013-03-27 23:05:00 

Das durch die Interpretation test2 einen Zeitzone-aware Datetime macht, als ob es in der EST-Zeitzone war:

print(eastern.localize(test2)) 
# 2013-03-27 23:05:00-04:00 

Dies macht ein Zeitzonen-bewusstes Datetime durch Interpretieren test2, als ob es in der UTC-Zeitzone wäre:

print(utc.localize(test2)) 
# 2013-03-27 23:05:00+00:00 

Alternativ können Sie eine Zeitzone-aware Datumzeit auf eine andere Zeitzone mit der astimezone Methode konvertieren:

test2_eastern = eastern.localize(test2) 
print(test2_eastern.astimezone(utc)) 
# 2013-03-28 03:05:00+00:00 
+0

Vielleicht wäre es hilfreich, einen Link hinzuzufügen: http://pytz.sourceforge.net/ –

+0

@MartinAtkins: Danke für den Link. – unutbu

+0

@unutbu - danke. Frage: Warum ist der Zeit-Offset '-04: 00'? Sollte dies nicht als EST und nicht als EDT behandelt werden? – codingknob

Verwandte Themen