- Whenever é uma biblioteca que aprimora o
datetime do Python, oferecendo segurança com DST e segurança de tipos
- Pode ser usada com Rust e Python puro, com alto desempenho
- Supera a biblioteca padrão do Python, além de Arrow e Pendulum, em tratamento de DST e segurança de tipos
- Suporta precisão de nanossegundos e as melhorias mais recentes no GIL, com desempenho aprimorado por meio de uma extensão em Rust
- É distribuída sob a licença MIT e segue sendo aprimorada continuamente com base em feedback
Introdução ao Whenever
- Whenever é uma biblioteca desenvolvida para superar as limitações do módulo
datetime do Python
- Oferece segurança com DST e segurança de tipos, aumentando a precisão do código
- É implementada em Rust e Python puro, com excelente desempenho
Limitações da biblioteca padrão
- O
datetime do Python nem sempre considera DST
- No sistema de tipos, não é possível distinguir entre datetimes naive e aware
Comparação com outras bibliotecas
- Arrow oferece uma API amigável, mas não resolve os problemas centrais
- Pendulum resolveu parte dos problemas de DST, mas teve queda de desempenho e pouca manutenção
Vantagens do Whenever
- Oferece operações aritméticas seguras com DST e uma API segura em tipos
- Tem alto desempenho, ainda melhor com a extensão em Rust
- Suporta precisão de nanossegundos e as melhorias mais recentes no GIL
Início rápido
- Fornece tipos explícitos como
Instant, ZonedDateTime e LocalDateTime
- Permite operações aritméticas seguras com DST e conversões explícitas
- Suporta formatação e parsing nos formatos ISO8601, RFC3339 e RFC2822
Roadmap
- Versão 0.x: alcançar paridade de recursos e melhorar a API
- Versão 1.0: garantir estabilidade da API e compatibilidade retroativa
Limitações
- Suporta o calendário gregoriano de 1 d.C. a 9999
- Suporta offsets de fuso horário compatíveis com o IANA TZ DB
- Não oferece suporte a segundos bissextos
Política de versionamento e compatibilidade
- Whenever segue versionamento semântico
- Antes da versão 1.0, ainda pode haver mudanças na API
Licença
- É distribuída sob a licença MIT, e as dependências em Rust usam licenças permissivas semelhantes
Agradecimentos
- Inspirado nos projetos Temporal, Noda Time e Joda Time
- Baseado no gráfico comparativo de benchmarks do projeto Ruff
1 comentários
Comentários no Hacker News
datetimecom data gera erro. Recentemente passei por dificuldades no trabalho por causa dissodatetimeda biblioteca padrão, mas no fim escolhi Whenever. Ela realmente parece mais adequada para lidar comdatetimee aparenta ser mantida de forma mais ativa. Sempre tive a sensação de que as outras bibliotecas deixavam escapar casos de borda. O Pendulum parece ter isso mais profundamente embutido na APIrequirements.txtdatetime. Provavelmente ele seria usado para lidar com mais datas do que outras bibliotecasdatetimecomo objetos de vida curta. Você provavelmente não vai querer milhares de objetosdatetimeespalhados pelo codebase. Em quase todos os casos, UTC já basta. Quando é preciso filtrar/agrupar em buckets/agregar por intervalo, usedatetimecomtzpara definir os critérios de filtragem/bucket/agregação, converta isso para UTC e continue fazendo comparações comint. A maioria dos casos que Whenever trata deve ser quandodatetimeé um objeto de longa duração. Não sinto essa necessidade de jeito nenhum. Eu uso isso para aceitar entrada detzdo cliente e converto para UTC assim que chega. Se realmente preciso detz, armazeno separadamente. Isso acontece raramente (por exemplo, em calendários você precisa armazenartz, mas provavelmente não ao lado de cada UTC, e sim no nível do usuário. Outro exemplo é agendamento de equipes, em que 8am-4pm ou 8pm-4am podem significar coisas diferentes dependendo da localização. Aí já não é maisdatetime, e sim horário dentro de um fuso)datetimequando quero um tratamento melhor de datas e horas no projeto. Também dá para usar em ambientes sem toolchain de Rust ou onde isso cause problema. Kudospedanticjá está em uso. Timely, precise, punctual, meticulous, ahorita, pronto etc. Gosto de nomes relacionados a tempo. Por fim, nenhum desses links menciona imutabilidade, mas isso deveria ser citado logo no topo