2015-02-13 5 views
7

Ich verwende the datetime.datetime class aus der Python-Standardbibliothek. Ich möchte eine Instanz dieser Klasse mit der UTC-Zeitzone erstellen. Um dies zu tun, versichere ich, dass ich als tzinfo Argument an den datetime Konstruktor eine Instanz von the tzinfo class übergeben muss.Wie konstruiere ich ein UTC `datetime` Objekt in Python?

The documentation for the tzinfo class sagt, dass:

tzinfo eine abstrakte Basisklasse ist, was bedeutet, dass diese Klasse nicht direkt instanziiert werden. Sie müssen eine konkrete Unterklasse ableiten und (mindestens) Implementierungen der Standardmethoden tzinfo bereitstellen, die von den von Ihnen verwendeten Methoden datetime benötigt werden. Das Modul datetime liefert keine konkreten Unterklassen von tzinfo.

Jetzt bin ich ratlos. Alles, was ich tun möchte, ist "UTC" darzustellen. Ich sollte in der Lage sein zu tun, dass etwa drei Zeichen verwenden, wie diese

import timezones 
... 
t = datetime(2015, 2, 1, 15, 16, 17, 345, timezones.UTC) 

Kurz gesagt, ich werde tun, nicht, was die Dokumentation sagt mir zu tun. Was ist meine Alternative?

+2

warum nicht in 'pytz' verwenden - http://pytz.sourceforge.net/? Oder möchten Sie eigene Objekte erstellen? –

+0

@sKwa, weil ich nicht davon gehört hatte - danke! Es sieht genau so aus, wie ich es will. – jameshfisher

+1

Ich bin froh, dass ich helfen konnte. Aber wenn Sie interessiert sind, wie es funktioniert ('tzinfo') können Sie hier lesen - http://agiliq.com/blog/2009/02/understanding-datetime-tzinfo-timedelta-amp-timezo/ –

Antwort

12

Es gibt feste Offset Zeitzonen in der stdlib seit Python 3.2:

from datetime import datetime, timezone 

t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=timezone.utc) 

Obwohl es leicht ist UTC-Zeitzone in früheren Versionen zu implementieren:

from datetime import tzinfo, timedelta, datetime 

ZERO = timedelta(0) 

class UTCtzinfo(tzinfo): 
    def utcoffset(self, dt): 
     return ZERO 

    def tzname(self, dt): 
     return "UTC" 

    def dst(self, dt): 
     return ZERO 

utc = UTCtzinfo() 
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=utc) 
+0

Aha, danke!Ich benutze Python 3.4; mein schlechtes zum Lesen der Python 3 Dokumentation ... – jameshfisher

3

Ich habe viel in pytz verwendet und sehr zufrieden von diesem Modul.

pytz

pytz bringt die Olson tz Datenbank in Python. Diese Bibliothek ermöglicht genaue und Kreuz Plattform Zeitzone Berechnungen mit Python 2.4 oder höher. Es löst auch das Problem der mehrdeutigen Zeiten am Ende der Sommerzeit, die Sie mehr über die Python Library Reference lesen können (datetime.tzinfo).

Auch würde ich zum Lesen empfehlen: Understanding DateTime, tzinfo, timedelta & TimeZone Conversions in python

+1

der Link liefert falsche Informationen, z. B. vergleichen, wie er antwortet * "Wie bekomme ich zwei Tage zurück/nach der Datumszeit ab jetzt?" * Mit [dieser Antwort auf die entsprechende Frage] (http://stackoverflow.com/a/26313848) – jfs

+0

@JFSebastian sicher, jeder kann einen Fehler machen, aber für das Verständnis ist es gut genug. Ich fühle, dass SO nicht für mich :( –

+0

pytz ist Overkill. Es ist ** sehr langsam ** nur zu importieren (zB 1-2 Sekunden). Es fügt auch eine 638-Datei-Paket zu Ihren Abhängigkeiten-nur um eine 7 zu bekommen Linie –

Verwandte Themen