- Whenever est une bibliothèque qui améliore
datetime de Python en apportant une sécurité vis-à-vis du DST et une sécurité de typage
- Elle peut être utilisée avec Rust et en Python pur, avec d’excellentes performances
- Elle surpasse la bibliothèque standard Python ainsi que Arrow et Pendulum en gestion du DST et en sécurité de typage
- Elle prend en charge la précision à la nanoseconde et les dernières améliorations du GIL, tout en améliorant les performances via une extension Rust
- Elle est proposée sous licence MIT et continue d’être améliorée grâce aux retours
Présentation de Whenever
- Whenever est une bibliothèque développée pour dépasser les limites du module
datetime de Python
- Elle fournit une sécurité vis-à-vis du DST et une sécurité de typage, ce qui améliore la fiabilité du code
- Elle est implémentée en Rust et en Python pur, avec d’excellentes performances
Limites de la bibliothèque standard
- Le
datetime de Python ne prend pas toujours DST en compte
- Le système de types ne permet pas de distinguer les datetime naïfs et aware
Comparaison avec d’autres bibliothèques
- Arrow propose une API conviviale, mais ne résout pas les problèmes fondamentaux
- Pendulum a corrigé certains problèmes liés au DST, mais avec une baisse de performances et un manque de maintenance
Avantages de Whenever
- Fournit une arithmétique sûre vis-à-vis du DST et une API sûre en matière de types
- Offre d’excellentes performances, encore améliorées via une extension Rust
- Prend en charge la précision à la nanoseconde et les dernières améliorations du GIL
Démarrage rapide
- Fournit des types explicites comme
Instant, ZonedDateTime, LocalDateTime, etc.
- Permet une arithmétique sûre vis-à-vis du DST et des conversions explicites
- Prend en charge le formatage et le parsing des formats ISO8601, RFC3339 et RFC2822
Feuille de route
- Version 0.x : atteindre la parité fonctionnelle et améliorer l’API
- Version 1.0 : garantir la stabilité de l’API et la compatibilité ascendante
Limites
- Prise en charge du calendrier grégorien de l’an 1 à 9999
- Prise en charge des offsets de fuseau horaire conformes à IANA TZ DB
- Les secondes intercalaires ne sont pas prises en charge
Politique de versionnage et de compatibilité
- Whenever suit le versionnage sémantique
- L’API peut encore évoluer avant la version 1.0
Licence
- Fourni sous licence MIT, avec des dépendances Rust utilisant des licences permissives similaires
Remerciements
- Inspiré par les projets Temporal, Noda Time et Joda Time
- Basé sur les graphiques de comparaison de benchmarks du projet Ruff
1 commentaires
Commentaire Hacker News
datetimeavec une date, cela provoque une erreur. J’ai récemment eu des difficultés au travail à cause de ce problèmedatetimede la bibliothèque standard, mais j’ai fini par choisir Whenever. En pratique, il semble mieux adapté à la gestion desdatetimeet paraît maintenu plus activement. J’ai toujours eu l’impression que les autres bibliothèques laissaient passer des cas limites. Pendulum semble plus profondément ancré dans l’APIrequirements.txtdatetime. C’est probablement utilisé pour traiter plus de dates que les autres bibliothèquesdatetimecomme des objets éphémères. On ne voudrait pas avoir des milliers d’objetsdatetimedans une base de code. Dans presque tous les cas, UTC suffit. Lorsqu’il faut filtrer/mettre en buckets/agréger par plage, on utilise undatetimeavectzpour définir les critères de filtrage, de bucketisation ou d’agrégation, puis on convertit cela en UTC pour continuer à faire des comparaisons d’entiers. La plupart des cas que Whenever traite concernent probablement desdatetimequi sont des objets de longue durée. Je n’en ressens absolument pas le besoin. Je l’utilise pour accepter une entréetzdepuis le client, puis je la convertis immédiatement en UTC à l’arrivée. Si on a vraiment besoin du fuseau horaire, on le stocke séparément. Cela arrive rarement (par exemple, dans un calendrier, il faut stocker le fuseau horaire, mais probablement pas à côté de chaque UTC ; il faudrait plutôt le stocker au niveau de l’utilisateur. Un autre exemple est la planification du personnel, où 8am-4pm ou 8pm-4am peuvent avoir une signification différente selon le lieu. À ce stade, ce n’est plus vraiment undatetime, mais une heure dans un fuseau horaire)datetimequand on veut une meilleure gestion des dates et heures dans un projet. Elle peut aussi être utilisée dans des environnements sans toolchain Rust, ou dans des environnements problématiques. Kudospedanticest déjà pris. Timely, precise, punctual, meticulous, ahorita, pronto, etc. J’aime bien les noms liés au temps. Enfin, aucun de ces liens ne mentionne l’immuabilité, alors que cela devrait être mis tout en haut