BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Noda Time 1.0: datas e horas do Java para o .NET

Noda Time 1.0: datas e horas do Java para o .NET

Favoritos

Jon Skeet, engenheiro de software do Google e MVP da Microsoft, anunciou a versão 1.0 da biblioteca Noda Time, uma versão para .NET da popular biblioteca Joda Time de datas e horas do Java.

A Noda Time visa corrigir deficiências nas bibliotecas de data e hora do .NET Framework, além de reduzir a complexidade de uso desses recursos. A biblioteca utiliza alguns conceitos chaves:

  • Instant - um momento medido a partir da Era Unix (ou seja, 00:00:00 UTC em 01/01/1970);
  • Partial - representação parcial de data/hora;
  • Interval - intervalo de tempo de um instante a outro (em milissegundos);
  • Duration - duração de um intervalo de tempo medido em milissegundos;
  • Period - período de tempo expresso em campos (ex.: 5 meses 3 dias 6 horas);
  • Chronology - um sistema de calendário "plugável"
  • Time Zones - fusos horários atualizados a partir do banco de dados de fusos horários, TZDB.

Embora o porte da biblioteca Joda Time para .NET tenha levado três anos e ainda exista trabalho a ser feito, Skeet afirma estar satisfeito com os resultados - considerando que a API, segundo ele, está bem à frente de outras de data/hora no .NET, especialmente na clareza e redução de complexidade acidental.

O InfoQ.com ouviu Skeet sobre a Noda Time e os seus planos para o projeto.

InfoQ: Quais funcionalidades a Noda Time 1.0 oferece que não estão presentes no .NET Framework 4.5?

JS: Os tipos de dados da BCL são bem limitados; há apenas dois tipos, DateTime e DateTimeOffset, para representar uma gama extensa de conceitos relacionados a horas e datas. A Noda Time possui um conjunto bem maior de tipos, que ajudam a manter o desenvolvedor focado no que realmente está trabalhando. É uma API deliberadamente restritiva, que visa evitar que o desenvolvedor execute operações sem sentido.

Para mais sobre os problemas nos tipos de dados da BCL, veja meu post sobre a classe DateTime.

Essencialmente, acho que as APIs devem expor recursos com base em quatro objetivos:

  • Forçar os usuários a tomar certas decisões (ao invés de tentar esconder deles aspectos importantes do domínio);
  • Quando essas decisões forem tomadas, permitir que sejam expressas em código claro - e fazer todo o trabalho por trás para garantir a efetividade dessas decisões;
  • Na medida do possível, permitir apenas que operações "com sentido" sejam expressas;
  • Encorajar a escrita do código de modo que possa ser testado.

Além de oferecer uma melhor API de data e hora, a Noda Time fornece uma implementação do bancos de dados de fusos horários TZDB/zoneinfo/Olson/IANA.

InfoQ: Quais seus planos para a biblioteca?

JS: Isso vai depender em parte dos nosso usuários, é claro. Há certamente algumas áreas incompletas - queremos mais opções para manipulação de textos (começando por ZonedDateTime e OffsetDateTime), além de suporte a PCL. A serialização em vários formatos também vem subindo em prioridade, e já temos suporte experimental a Json.NET (separado do assembly principal). Também espero que possamos adicionar suporte à serialização de XML e binária - depois de estarmos confiantes que acertamos os principais conceitos da versão 1.0.

InfoQ: A Noda Time funciona com qualquer versão do .NET? E quanto ao Mono?

JS: Atualmente nosso alvo é o .NET 3.5+, mas somente no desktop. Queremos incluir suporte às Portable Class Libraries (PCL), porém isso necessitará de um pouco mais de trabalho, principalmente o de cortar funcionalidades que precisam de suporte ao framework, o qual não está disponível na PCL.

O código é projetado para funcionar no Mono; testamos no Mono o máximo que pudemos, mas enfrentamos vários problemas na versão estável do Mono, a maioria relacionados a culturas e à classe TimeZoneInfo. Esperamos que a futura versão 3.0 do Mono resolva ao menos alguns desses problemas. Para a utilização simples da biblioteca, e ao utilizar o banco de fusos horários (TZDB), o suporte para Mono funciona bem. Obviamente, manter compatibilidade vai ser sempre um trabalho incremental - vamos colocar mais esforço em documentar exatamente os problemas que encontramos em cada combinação de SO/versão.


A biblioteca Noda Time é open source com licença Apache. Pode-se obter versões binárias ou o código-fonte diretamente.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT