- Whenever ist eine Bibliothek, die Pythons
datetime verbessert und DST-Sicherheit sowie Typsicherheit bietet
- Sie kann mit Rust und in reinem Python verwendet werden und liefert eine starke Performance
- Gegenüber der Python-Standardbibliothek sowie Arrow und Pendulum ist sie bei DST-Verarbeitung und Typsicherheit überlegen
- Sie unterstützt Nanosekunden-Präzision und aktuelle GIL-Verbesserungen und steigert die Leistung durch eine Rust-Erweiterung
- Sie wird unter der MIT-Lizenz bereitgestellt und anhand von Feedback kontinuierlich verbessert
Einführung in Whenever
- Whenever ist eine Bibliothek, die entwickelt wurde, um die Grenzen von Pythons
datetime-Modul zu überwinden
- Sie bietet DST-Sicherheit und Typsicherheit und erhöht damit die Korrektheit von Code
- Sie ist in Rust und reinem Python implementiert und bietet starke Performance
Grenzen der Standardbibliothek
- Pythons
datetime berücksichtigt DST nicht immer
- Im Typsystem lassen sich naive und aware Datetime-Werte nicht unterscheiden
Vergleich mit anderen Bibliotheken
- Arrow bietet eine benutzerfreundliche API, löst aber die Kernprobleme nicht
- Pendulum behebt einige DST-Probleme, hat jedoch Performance-Nachteile und wird nur unzureichend gepflegt
Vorteile von Whenever
- Bietet DST-sichere arithmetische Operationen und eine typsichere API
- Liefert starke Performance, die durch die Rust-Erweiterung weiter verbessert wird
- Unterstützt Nanosekunden-Präzision und aktuelle GIL-Verbesserungen
Schnellstart
- Bietet explizite Typen wie
Instant, ZonedDateTime, LocalDateTime usw.
- Ermöglicht DST-sichere arithmetische Operationen und explizite Konvertierungen
- Unterstützt Formatierung und Parsing der Formate ISO8601, RFC3339 und RFC2822
Roadmap
- Version 0.x: Erreichen von Funktionsgleichheit und Verbesserung der API
- Version 1.0: Sicherstellung von API-Stabilität und Abwärtskompatibilität
Einschränkungen
- Unterstützt den gregorianischen Kalender vom Jahr 1 bis 9999
- Unterstützt Zeitzonen-Offsets, die mit der IANA TZ DB übereinstimmen
- Schaltsekunden werden nicht unterstützt
Versionsverwaltung und Kompatibilitätsrichtlinie
- Whenever folgt dem Semantic Versioning
- Vor Version 1.0 sind API-Änderungen möglich
Lizenz
- Wird unter der MIT-Lizenz bereitgestellt; Rust-Abhängigkeiten verwenden ähnliche permissive Lizenzen
Danksagung
- Inspiriert von den Projekten Temporal, Noda Time und Joda Time
- Basierend auf den Benchmark-Vergleichsgrafiken des Ruff-Projekts
1 Kommentare
Hacker-News-Kommentare
datetimeunddatemiteinander vergleicht, tritt ein Fehler auf. Ich hatte kürzlich bei der Arbeit wegen dieses Problems Schwierigkeitendatetimeder Standardbibliothek verwendet, mich am Ende aber für Whenever entschieden. Es scheint tatsächlich besser für den Umgang mitdatetimegeeignet zu sein und aktiver gepflegt zu werden. Bei den anderen Bibliotheken hatte ich immer das Gefühl, dass sie Edge Cases übersehen. Pendulum scheint tiefer in die API eingebettet zu seinrequirements.txtangebendatetime-Vergleich hinzufügt. Vermutlich wird es zum Verarbeiten von mehr Datumswerten verwendet als die anderen Bibliothekendatetimeals kurzlebige Objekte. Man will vermutlich keine Tausenden vondatetime-Objekten in einer Codebasis haben. In fast allen Fällen reicht UTC aus. Wenn man nach Bereichen filtern, bucketen oder aggregieren muss, verwendet mandatetimemittz, um die Kriterien für Filtern/Bucketing/Aggregation festzulegen, wandelt das dann in UTC um und macht weiterhin reineint-Vergleiche. Die meisten Fälle, die Whenever behandelt, dürften solche sein, in denendatetimelanglebige Objekte sind. Ich hatte nie das Bedürfnis danach. Ich verwende es, umtz-Eingaben vom Client zu akzeptieren, und wandle sie sofort bei Eingang in UTC um. Wenn mantzwirklich braucht, speichert man es separat. Das kommt selten vor (z. B. sollte man in Kalenderntzspeichern, aber vermutlich nicht neben jedem UTC-Wert, sondern auf Benutzerebene. Ein anderes Beispiel ist die Personaleinsatzplanung, bei der 8am-4pm oder 8pm-4am je nach Ort etwas anderes bedeuten kann. Das ist dann keindatetimemehr, sondern eine Uhrzeit in einer Zeitzone)datetimezurückkehren, wenn man im Projekt eine besseredatetime-Behandlung möchte. Es ist auch in Umgebungen ohne Rust-Toolchain oder mit problematischer Rust-Toolchain nutzbar. Kudos