Les dates/heures Python simplifiées.
Prend en charge Python 3.8 et versions ultérieures .
>>> importer le pendule>>> now_in_paris = pendulum.now('Europe/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# Changement de fuseau horaire transparent>>> now_in_paris.in_timezone('UTC')'2016-07-03T22:49:58.502116+00:00'>>> demain = pendule.now().add(days=1)>>> last_week = pendule.now() .subtract(weeks=1)>>> past = pendulum.now().subtract(minutes=2)>>> past.diff_for_humans()'il y a 2 minutes'>>> delta = past - last_week>>> delta.hours23>>> delta.in_words(locale='en')'6 jours 23 heures 58 minutes'# Gestion correcte de la date et de l'heure normalisation>>> pendule.datetime(2013, 3, 31, 2, 30, tz='Europe/Paris')'2013-03-31T03:30:00+02:00' # 2h30 n'existe pas (Heure sautée)# Gestion correcte des transitions d'heure>>> just_before = pendulum.datetime(2013 , 3, 31, 1, 59, 59, 999999, tz='Europe/Paris')'2013-03-31T01:59:59.999999+01:00'>>> just_before.add(microseconds=1)'2013-03-31T03:00:00+02:00'
Site officiel
Documentation
Suivi des problèmes
Les instances datetime
natives sont suffisantes pour les cas de base, mais lorsque vous êtes confronté à des cas d'utilisation plus complexes, elles présentent souvent des limites et ne sont pas aussi intuitives à utiliser. Pendulum
fournit une API plus propre et plus facile à utiliser tout en s'appuyant sur la bibliothèque standard. Donc c'est toujours datetime
mais en mieux.
Contrairement aux autres bibliothèques datetime pour Python, Pendulum remplace directement la classe datetime
standard (elle en hérite), donc, fondamentalement, vous pouvez remplacer toutes vos instances datetime
par des instances DateTime
dans votre code (des exceptions existent pour les bibliothèques qui vérifient le type des objets en utilisant la fonction type
comme sqlite3
ou PyMySQL
par exemple).
Cela supprime également la notion de date/heure naïve : chaque instance Pendulum
prend en compte le fuseau horaire et est par défaut en UTC
pour une utilisation plus facile.
Pendulum améliore également la classe timedelta
standard en fournissant des méthodes et des propriétés plus intuitives.
Même si la classe DateTime
est une sous-classe de datetime
il existe de rares cas où elle ne peut pas remplacer directement la classe native. Voici une liste (non exhaustive) des cas rapportés avec une solution possible, le cas échéant :
sqlite3
utilisera la fonction type()
pour déterminer le type de l'objet par défaut. Pour contourner ce problème, vous pouvez enregistrer un nouvel adaptateur :
à partir du pendule import DateTimefrom sqlite3 import register_adapterregister_adapter(DateTime, lambda val: val.isoformat(' '))
mysqlclient
(ancien MySQLdb
) et PyMySQL
utiliseront la fonction type()
pour déterminer le type de l'objet par défaut. Pour contourner ce problème, vous pouvez enregistrer un nouvel adaptateur :
importer MySQLdb.convertersimport pymysql.convertersfrom pendule importer DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime
django
utilisera la méthode isoformat()
pour stocker les dates et heures dans la base de données. Cependant, comme pendulum
tient toujours compte du fuseau horaire, les informations de décalage seront toujours renvoyées par isoformat()
générant une erreur, au moins pour les bases de données MySQL. Pour contourner ce problème, vous pouvez soit créer votre propre DateTimeField
, soit utiliser la solution de contournement précédente pour MySQLdb
:
à partir de django.db.models importer DateTimeField en tant que BaseDateTimeFieldfrom pendule importer 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 ' ' si val est Aucun autre val.isoformat()
Les contributions sont les bienvenues, notamment en matière de localisation.
Pour travailler sur la base de code Pendulum, vous souhaiterez cloner le projet localement et installer les dépendances requises via la poésie.
$ git clone [email protected]:sdispater/pendulum.git $ installation de poésie
Si vous souhaitez aider à la localisation, il existe deux cas différents : la locale existe déjà ou non.
Si les paramètres régionaux n'existent pas, vous devrez les créer à l'aide de l'utilitaire clock
:
./clock locale créer
Il générera un répertoire dans pendulum/locales
nommé d'après vos paramètres régionaux, avec la structure suivante :
/
- personnalisé.py
- locale.py
Le fichier locale.py
ne doit pas être modifié. Il contient les traductions fournies par la base de données CLDR.
Le fichier custom.py
est celui que vous souhaitez modifier. Il contient les données nécessaires à Pendulum qui ne sont pas fournies par la base de données CLDR. Vous pouvez prendre les données en comme référence pour voir quelles données sont nécessaires.
Vous devez également ajouter des tests pour les paramètres régionaux créés ou modifiés.