Noda Time 1.0: datas e horas do Java para o .NET
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.
Conteúdo educacional
Lean na Globo.com
Bernardo Heynemann 24 Mai, 2013
Mobilidade: Frameworks, SOs e o Mercado
Ricardo Ogliari 23 Mai, 2013
Caminhos de uma estratégia mobile
Sérgio Lopes 23 Mai, 2013
Complexidade organizacional no Século 21
Alexandre Magno 16 Mai, 2013

Olá visitante
Você precisa cadastrar-se no InfoQ Brasil ou Login para enviar comentários. Há muitas vantagens em se cadastrar.Obtenha o máximo da experiência do InfoQ Brasil.
Dê sua opinião