Las fechas y horas de Python son fáciles.
Admite Python 3.8 y versiones más recientes .
>>> importar péndulo>>> now_in_paris = pendulum.now('Europa/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# Cambio continuo de zona horaria>>> now_in_paris.in_timezone('UTC')'2016-07-03T22:49:58.502116+00:00'>>> mañana = pendulum.now().add(days=1)>>> última_semana = pendulum.now() .restar(semanas=1)>>> pasado = pendulum.now().restar(minutos=2)>>> past.diff_for_humans()'hace 2 minutos'>>> delta = pasado - última_semana>>> delta.hours23>>> delta.in_words(locale='en')'6 días 23 horas 58 minutos'# Manejo adecuado de fecha y hora normalización >>> pendulum.datetime(2013, 3, 31, 2, 30, tz='Europa/París')'2013-03-31T03:30:00+02:00' # 2:30 no existe (hora omitida)# Manejo adecuado de las transiciones de horario de verano >>> just_before = pendulum.datetime(2013 , 3, 31, 1, 59, 59, 999999, tz='Europa/París')'2013-03-31T01:59:59.999999+01:00'>>> just_before.add(microsegundos=1)'2013-03-31T03:00:00+02:00'
Sitio web oficial
Documentación
Rastreador de problemas
Las instancias nativas datetime
son suficientes para casos básicos, pero cuando se enfrenta a casos de uso más complejos, a menudo muestran limitaciones y no es tan intuitivo trabajar con ellas. Pendulum
proporciona una API más limpia y fácil de usar sin dejar de depender de la biblioteca estándar. Así que todavía es datetime
, pero mejor.
A diferencia de otras bibliotecas de fecha y hora para Python, Pendulum es un reemplazo directo para la clase de datetime
estándar (hereda de ella), por lo que, básicamente, puede reemplazar todas sus instancias datetime
por instancias DateTime
en su código (existen excepciones para bibliotecas que verifican el tipo de objetos mediante el uso de la función type
como sqlite3
o PyMySQL
, por ejemplo).
También elimina la noción de fechas y horas ingenuas: cada instancia Pendulum
reconoce la zona horaria y, de forma predeterminada, está en UTC
para facilitar su uso.
Pendulum también mejora la clase timedelta
estándar al proporcionar métodos y propiedades más intuitivos.
Aunque la clase DateTime
es una subclase de datetime
hay algunos casos raros en los que no puede reemplazar la clase nativa directamente. Aquí hay una lista (no exhaustiva) de los casos reportados con una posible solución, si la hubiera:
sqlite3
utilizará la función type()
para determinar el tipo de objeto de forma predeterminada. Para solucionarlo, puede registrar un nuevo adaptador:
desde péndulo importar FechaHoradesde sqlite3 importar registro_adapterregister_adapter(DateTime, lambda val: val.isoformat(' '))
mysqlclient
(anteriormente MySQLdb
) y PyMySQL
usarán la función type()
para determinar el tipo de objeto de forma predeterminada. Para solucionarlo, puede registrar un nuevo adaptador:
importar MySQLdb.convertersimportar pymysql.convertersfrom péndulo importar DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime
django
utilizará el método isoformat()
para almacenar fechas y horas en la base de datos. Sin embargo, dado que pendulum
siempre reconoce la zona horaria, isoformat()
siempre devolverá la información de compensación generando un error, al menos para las bases de datos MySQL. Para solucionarlo, puede crear su propio DateTimeField
o utilizar la solución anterior para MySQLdb
:
desde django.db.models importe DateTimeField como BaseDateTimeFielddesde péndulo importe 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 es Ninguno más val.isoformat()
Las contribuciones son bienvenidas, especialmente con la localización.
Para trabajar en el código base de Pendulum, querrás clonar el proyecto localmente e instalar las dependencias necesarias a través de poesía.
$ git clon [email protected]:sdispater/pendulum.git $ instalación de poesía
Si quieres ayudar con la localización, hay dos casos diferentes: la configuración regional ya existe o no.
Si la configuración regional no existe, deberá crearla utilizando la utilidad clock
:
./clock configuración regional crear
Generará un directorio en pendulum/locales
con el nombre de su ubicación, con la siguiente estructura:
/
- personalizado.py
- configuración regional.py
El archivo locale.py
no debe modificarse. Contiene las traducciones proporcionadas por la base de datos CLDR.
El archivo custom.py
es el que desea modificar. Contiene los datos que necesita Pendulum y que no proporciona la base de datos CLDR. Puede tomar los datos en como referencia para ver qué datos se necesitan.
También debes agregar pruebas para la configuración regional creada o modificada.