Datetimes em Python facilitados.
Suporta Python 3.8 e versões mais recentes .
>>> importar pêndulo >>> now_in_paris = pendulum.now('Europe/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# Mudança perfeita de fuso horário>>> now_in_paris.in_timezone('UTC')'2016-07-03T22:49:58.502116+00:00'>>> amanhã = pêndulo.now().add(dias=1)>>> última_semana = pêndulo.now() .subtract(semanas=1)>>> passado = pêndulo.now().subtract(minutos=2)>>> past.diff_for_humans()'2 minutos atrás'>>> delta = passado - last_week>>> delta.hours23>>> delta.in_words(locale='en')'6 dias 23 horas 58 minutos'# Tratamento adequado de data e hora normalização >>> pêndulo.datetime(2013, 3, 31, 2, 30, tz='Europa/Paris')'2013-03-31T03:30:00+02:00' # 2:30 não existe (tempo ignorado)# Tratamento adequado de transições dst >>> 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'
Site oficial
Documentação
Rastreador de problemas
As instâncias nativas datetime
são suficientes para casos básicos, mas quando você enfrenta casos de uso mais complexos, elas geralmente mostram limitações e não são tão intuitivas de trabalhar. Pendulum
fornece uma API mais limpa e fácil de usar, ao mesmo tempo que depende da biblioteca padrão. Então ainda é datetime
mas melhor.
Ao contrário de outras bibliotecas de data e hora para Python, Pendulum é um substituto imediato para a classe de datetime
padrão (ela herda dela), então, basicamente, você pode substituir todas as suas instâncias datetime
por instâncias DateTime
em seu código (existem exceções para bibliotecas que verificam o tipo dos objetos usando a função type
como sqlite3
ou PyMySQL
, por exemplo).
Ele também remove a noção de data e hora ingênuas: cada instância Pendulum
reconhece o fuso horário e, por padrão, está no UTC
para facilitar o uso.
Pendulum também melhora a classe timedelta
padrão, fornecendo métodos e propriedades mais intuitivos.
Mesmo que a classe DateTime
seja uma subclasse de datetime
existem alguns casos raros em que ela não pode substituir a classe nativa diretamente. Aqui está uma lista (não exaustiva) dos casos relatados com uma possível solução, se houver:
sqlite3
usará a função type()
para determinar o tipo do objeto por padrão. Para contornar isso, você pode registrar um novo adaptador:
do pêndulo importar DateTimefrom sqlite3 import Register_adapterregister_adapter(DateTime, lambda val: val.isoformat(' '))
mysqlclient
(antigo MySQLdb
) e PyMySQL
usarão a função type()
para determinar o tipo do objeto por padrão. Para contornar isso, você pode registrar um novo adaptador:
importar MySQLdb.convertersimport pymysql.convertersfrom pêndulo importar DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime
django
usará o método isoformat()
para armazenar datas e horas no banco de dados. No entanto, como pendulum
está sempre ciente do fuso horário, as informações de deslocamento sempre serão retornadas por isoformat()
gerando um erro, pelo menos para bancos de dados MySQL. Para contornar isso, você pode criar seu próprio DateTimeField
ou usar a solução alternativa anterior para MySQLdb
:
de django.db.models importar DateTimeField como BaseDateTimeFielddo pêndulo importar 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 ' 'se val for None else val.isoformat()
Contribuições são bem-vindas, especialmente com localização.
Para trabalhar na base de código Pendulum, você desejará clonar o projeto localmente e instalar as dependências necessárias via poesia.
$ git clone [email protected]:sdispater/pendulum.git $ instalação de poesia
Se você quiser ajudar na localização, existem dois casos diferentes: a localidade já existe ou não.
Se a localidade não existir, você precisará criá-la usando o utilitário clock
:
./clock locale create
Ele irá gerar um diretório em pendulum/locales
com o nome de sua localidade, com a seguinte estrutura:
/
- custom.py
-locale.py
O arquivo locale.py
não deve ser modificado. Contém as traduções fornecidas pelo banco de dados CLDR.
O arquivo custom.py
é aquele que você deseja modificar. Ele contém os dados necessários ao Pendulum que não são fornecidos pelo banco de dados CLDR. Você pode usar os dados en como referência para ver quais dados são necessários.
Você também deve adicionar testes para o código de idioma criado ou modificado.