Python-Datumszeiten leicht gemacht.
Unterstützt Python 3.8 und höher .
>>> Pendel importieren>>> now_in_paris = pendulum.now('Europe/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# Nahtloser Zeitzonenwechsel>>> now_in_paris.in_timezone('UTC')'2016-07-03T22:49:58.502116+00:00'>>> morgen = pendulum.now().add(days=1)>>> last_week = pendulum.now() .subtract(weeks=1)>>> past = pendulum.now().subtract(minutes=2)>>> past.diff_for_humans()'vor 2 Minuten'>>> delta = past - last_week>>> delta.hours23>>> delta.in_words(locale='en')'6 Tage 23 Stunden 58 Minuten'# Korrekte Handhabung von datetime Normalisierung>>> pendulum.datetime(2013, 3, 31, 2, 30, tz='Europe/Paris')'2013-03-31T03:30:00+02:00' # 2:30 existiert nicht (Zeit übersprungen)# Richtige Handhabung von dst-Übergängen>>> just_before = pendulum.datetime(2013 , 3, 31, 1, 59, 59, 999999, tz='Europa/Paris')'2013-03-31T01:59:59.999999+01:00'>>> just_before.add(microseconds=1)'2013-03-31T03:00:00+02:00'
Offizielle Website
Dokumentation
Issue-Tracker
Native datetime
Instanzen reichen für einfache Fälle aus. Bei komplexeren Anwendungsfällen weisen sie jedoch häufig Einschränkungen auf und sind nicht so intuitiv zu handhaben. Pendulum
bietet eine sauberere und benutzerfreundlichere API und verlässt sich dennoch auf die Standardbibliothek. Es ist also immer noch datetime
, aber besser.
Im Gegensatz zu anderen DateTime-Bibliotheken für Python ist Pendulum ein direkter Ersatz für die Standard- datetime
-Klasse (sie erbt von dieser), sodass Sie grundsätzlich alle Ihre datetime
Instanzen durch DateTime
Instanzen in Ihrem Code ersetzen können (Ausnahmen gibt es für Bibliotheken, die eine Überprüfung durchführen). den Typ der Objekte mithilfe der type
(z. B. sqlite3
oder PyMySQL
).
Es beseitigt auch die Vorstellung von naiven Datums- und Uhrzeitangaben: Jede Pendulum
-Instanz berücksichtigt die Zeitzone und ist zur Vereinfachung der Verwendung standardmäßig in UTC
eingestellt.
Pendulum verbessert auch die Standard- timedelta
Klasse, indem es intuitivere Methoden und Eigenschaften bereitstellt.
Obwohl die DateTime
-Klasse eine Unterklasse von datetime
ist, gibt es einige seltene Fälle, in denen sie die native Klasse nicht direkt ersetzen kann. Hier ist eine (nicht erschöpfende) Liste der gemeldeten Fälle mit einer möglichen Lösung, falls vorhanden:
sqlite3
verwendet standardmäßig die Funktion type()
, um den Typ des Objekts zu bestimmen. Um dies zu umgehen, können Sie einen neuen Adapter registrieren:
from pendulum import DateTimefrom sqlite3 import register_adapterregister_adapter(DateTime, lambda val: val.isoformat(' '))
mysqlclient
(früher MySQLdb
) und PyMySQL
verwenden standardmäßig die Funktion type()
um den Typ des Objekts zu bestimmen. Um dies zu umgehen, können Sie einen neuen Adapter registrieren:
import MySQLdb.convertersimport pymysql.convertersfrom pendulum import DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime
django
verwendet die Methode isoformat()
um Datumsangaben in der Datenbank zu speichern. Da pendulum
jedoch immer die Zeitzone berücksichtigt, werden die Offset-Informationen immer von isoformat()
zurückgegeben, was zumindest bei MySQL-Datenbanken einen Fehler auslöst. Um dies zu umgehen, können Sie entweder Ihr eigenes DateTimeField
erstellen oder die vorherige Problemumgehung für MySQLdb
verwenden:
from django.db.models import DateTimeField as BaseDateTimeFieldfrom pendulum import DateTimeclass DateTimeField(BaseDateTimeField):def value_to_string(self, obj):val = self.value_from_object(obj)if isinstance(value, DateTime):return value.to_datetime_string()return ' ' wenn val None ist, sonst val.isoformat()
Beiträge sind willkommen, insbesondere zur Lokalisierung.
Um an der Pendulum-Codebasis zu arbeiten, sollten Sie das Projekt lokal klonen und die erforderlichen Abhängigkeiten über Poetry installieren.
$ git clone [email protected]:sdispater/pendulum.git $ Poesie installieren
Wenn Sie bei der Lokalisierung helfen möchten, gibt es zwei verschiedene Fälle: Das Gebietsschema existiert bereits oder nicht.
Wenn das Gebietsschema nicht vorhanden ist, müssen Sie es mit dem clock
Dienstprogramm erstellen:
./clock locale create
Es wird ein Verzeichnis in pendulum/locales
generiert, das nach Ihrem Gebietsschema benannt ist und die folgende Struktur aufweist:
/
- custom.py
- locale.py
Die Datei locale.py
darf nicht geändert werden. Es enthält die von der CLDR-Datenbank bereitgestellten Übersetzungen.
Die Datei custom.py
ist die Datei, die Sie ändern möchten. Es enthält die von Pendulum benötigten Daten, die nicht von der CLDR-Datenbank bereitgestellt werden. Sie können die en-Daten als Referenz verwenden, um zu sehen, welche Daten benötigt werden.
Sie sollten auch Tests für das erstellte oder geänderte Gebietsschema hinzufügen.