Was in datetime neu ist, ist in Python 3 etwas nützlicher

Ich persönlich denke, dass das datetime-Modul eine der Standard-Python-Bibliotheken ist, die nicht sehr cool ist, da es häufig verwendet wird, aber viele Fallen hat und schwierig zu verwenden ist.

Es ist so ein Datum / Uhrzeit-Modul, aber ich bin ein wenig beeindruckt von der Tatsache, dass ich den Code sehr gut organisieren konnte, als ich mein Python 2-Projekt auf Python 3 migrierte, daher möchte ich ihn vorstellen.

Gegenseitige Umwandlung mit Unixtime

Die Konvertierung von Unixtime nach "datetime.datetime" erfolgt mit der Funktion ".fromtimestamp ()" für die Ortszeit und der Funktion ".utcfromtimestamp ()" für UTC.

>>> import time
>>> from datetime import datetime
>>> now = time.time()
>>> now
1415542873.099776

>>> loc = datetime.fromtimestamp(now)
>>> loc
datetime.datetime(2014, 11, 9, 23, 21, 13, 99776)

>>> utc = datetime.utcfromtimestamp(now)
>>> utc
datetime.datetime(2014, 11, 9, 14, 21, 13, 99776)

Im Gegenteil, die Konvertierung von "datetime" nach "unixtime" kann nicht direkt durchgeführt werden, und es ist erforderlich, sie einmal mit der Methode ".timetuple ()" in den Typ "time.struct_time" zu konvertieren. Wenn Sie von dort zu Unixtime zurückkehren, können Sie für die Ortszeit "time.mktime ()" verwenden, für UTC jedoch "calendar.timegm ()". Es ist ein wenig enttäuschend, das Kalendermodul nur dafür zu importieren.

>>> time.mktime(loc.timetuple())
1415542873.0
>>> import calendar
>>> calendar.timegm(utc.timetuple())
1415542873

Das Zeitmodul bietet nur einen zusätzlichen Timer pro Betriebssystem für die Funktionalität der C-Sprache time.h, und datetime ist umgekehrt für Python ausgelegt. Wenn Sie also versuchen, es in Kombination zu verwenden, tritt eine solche Nichtübereinstimmung auf. War dort.

Python 3.3 fügt jedoch eine ".timestamp ()" - Methode hinzu, die Unixtime direkt auf dem datetime-Objekt erstellt.

>>> from datetime import datetime
>>> now = 1415542873.099776
>>> loc = datetime.fromtimestamp(now)
>>> loc.timestamp()
1415542873.099776

.Timestamp () verwendet jedoch tzinfo, das datetime selbst hat, und wenn es datetime (naiv genannt) ist, das tzinfo nicht hat, wird es als Ortszeit berechnet. Wenn Sie UTC datetime in unixtime konvertieren möchten, müssen Sie tz = utc richtig einstellen. Siehe hierzu den nächsten Abschnitt.

timezone

Der datetime-Typ des datetime-Moduls mit Zeitzoneninformationen wird als bewusst bezeichnet, und derjenige, der keine Zeitzoneninformationen enthält, wird als naiv bezeichnet.

Die naive Datumszeit ist attraktiv als reiner Typ, der bei der Interaktion mit anderer naiver Software wie MySQL nicht von der verrauschten Zeitzonenkonvertierung abhängig wird, sondern beim Schreiben von Programmen, die sowohl UTC als auch JST verarbeiten. Wenn Sie einen Fehler machen und +9 zweimal ausführen, wird dies einen Fehler verursachen.

IANA veröffentlicht eine Datenbank mit Weltzeitzonen. Da das Timing jedoch nicht mit dem Python-Versions-Upgrade synchronisiert ist, bietet die Standardbibliothek nur abstrakte Klassen und die tatsächlichen Zeitzonenklassen, die davon erben. Wurde in einer nicht standardmäßigen Bibliothek namens pytz bereitgestellt.

JST und UTC, die bisher keine Sommerzeit haben, sind jedoch ausreichende Anwendungen, und es ist ein wenig mühsam, Zeitzonendatenbanken auf der ganzen Welt zu verwenden. Ich habe das Gefühl, dass ich die Gefühle von ASCII-sprechenden Menschen verstehen kann, die nicht an die Multi-Byte-Umgebung denken möchten.

In Python 3 wird in der Standardbibliothek eine Klasse mit dem Namen "datetime.timezone" bereitgestellt, die Zeitzonen mit einem festen Zeitunterschied zu UTC und ohne Sommerzeit verarbeitet. Für UTC wird "datetime.timezone.utc" von Anfang an bereitgestellt. Es ist vorgesehen.

Verwenden Sie dies, um die Unixtime und die Datums- / Uhrzeitangabe zu konvertieren, die wir im vorherigen Abschnitt durchgeführt haben, diesmal mit einer bewussten Datums- / Uhrzeitangabe.

>>> from datetime import datetime, timezone, timedelta
>>> now = 1415542873.099776
>>> JST = timezone(timedelta(hours=+9), 'JST')

>>> loc = datetime.fromtimestamp(now, JST)
>>> utc = datetime.fromtimestamp(now, timezone.utc)
>>> print(loc)
2014-11-09 23:21:13.099776+09:00
>>> print(utc)
2014-11-09 14:21:13.099776+00:00
>>> loc.timestamp()
1415542873.099776
>>> utc.timestamp()
1415542873.099776

Sie benötigen nicht einmal ein Kalendermodul und können jetzt einfacheren, weniger fehlerhaften Code als in Python 2 schreiben.

Verwenden Sie die Methode .replace (), um der naiven Datumszeit Zeitzoneninformationen hinzuzufügen.

>>> naiveutc = datetime.utcfromtimestamp(now)
>>> naiveutc
datetime.datetime(2014, 11, 9, 14, 21, 13, 99776)
>>> naiveutc.replace(tzinfo=timezone.utc).timestamp()
1415542873.099776

Recommended Posts

Was in datetime neu ist, ist in Python 3 etwas nützlicher
Was ist neu in Python 3.5?
Was ist neu in Python 3.6?
Was ist neu in Python 3.10 (Zusammenfassung)
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Neu in Python 3.4.0 (2) --enum
Was ist neu in Python 3.9 (Zusammenfassung)
Neu in Python3.9 Wörterbücher zusammenführen
Spielen Sie Sounds in Python ab, vorausgesetzt, die Tastatur ist eine Klaviertastatur
Ein Programm, das bestimmt, ob eine in Python eingegebene Zahl eine Primzahl ist
Hash in Perl ist ein Wörterbuch in Python
Ein Memo, das ich schnell in Python geschrieben habe
Ein Programm, das doppelte Anweisungen in Python entfernt
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie ein Datum / Uhrzeit-Objekt aus einer Zeichenfolge in Python (Python 3.3).
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Hello World mit einem einfachen Webserver, der WSGI (Web Server Gateway Interface) in Python folgt
Suchen Sie den Teil 575 aus Wikipedia in Python
Erstellen Sie in Python einen Dekorator, der Argumente dynamisch akzeptiert. Erstellen Sie einen Dekorator
Neu in Python 3.4.0 (1) --pathlib
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
So testen Sie, ob die Ausnahme in Python unittest ausgelöst wird
Python-Programm von "Buch, das schwieriges Programmieren leicht lehrt"
Ein Allzweckprogramm, das Linux-Befehlszeichenfolgen mit Python formatiert
Eine Funktion, die iterable in Python in N Teile unterteilt
Veröffentlichung einer Bibliothek, die Zeichendaten in Python-Bildern verbirgt
Durchlaufen Sie einen Generator, der einen Datumsiterator in Python zurückgibt
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Das Graustufenbild wird in OpenCV / Python als Farbbild angezeigt
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
[MQTT / Python] Implementierte eine Klasse, die Pub / Sub von MQTT in Python ausführt
Gibt es eine Verzerrung in den Zahlen, die in den Fibonacci-Zahlen erscheinen?
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
Machen Sie einen Screenshot in Python
[Python] Effizienteres Debuggen!
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Erstellen Sie ein Lesezeichen in Python
Zeichne ein Herz in Python
Hier finden Sie eine Zusammenfassung der Dinge, die beim Umgang mit komplexen Zahlen in Python hilfreich sein können
Ein Memo, das doppelte Anführungszeichen in voller Breite mit regulären Python-Ausdrücken verarbeitet
Verwenden Sie networkx, eine Bibliothek, die Diagramme in Python verarbeitet (Teil 2: Lernprogramm).
Einfach! Implementieren Sie einen Twitter-Bot, der auf Heroku in Python ausgeführt wird
Ein Datensatz, den GAMEBOY mit Python nicht erstellen konnte. (PYBOY)
[Python] Ausführungszeit, wenn eine Funktion in einen Wörterbuchwert eingegeben wird
Über psd-tools, eine Bibliothek, die psd-Dateien in Python verarbeiten kann
Löschen Sie ein bestimmtes Zeichen in Python, wenn es das letzte ist
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde
Zeitzonenspezifikation beim Konvertieren einer Zeichenfolge in einen Datums- / Uhrzeittyp mit Python
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Eine Klasse, die häufig verwendete Methoden in Twitter API (Python) zusammenfasst.
Implementieren Sie in Python Ihren eigenen jupyter magic-Befehl% timeit, der für die Geschwindigkeitsmessung praktisch ist
[Python] Was ist eine Zip-Funktion?
Wahrscheinlich in einer Nishiki-Schlange (Originaltitel: Vielleicht in Python)
[Python] Was ist eine with-Anweisung?
Schreiben Sie eine Dichotomie in Python
[Python] Verwalten Sie Funktionen in einer Liste
Drücken Sie einen Befehl in Python (Windows)