BT

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

por Abel Avram , traduzido por João Talles em 22 Jan 2013 |

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

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.