Submarino.com.br




Trabalhando com datas em Java

Introdução

A forma padrão de trabalhar com datas em Java pode parecer complexa. Existem vários detalhes que fogem ao entendimento e ao dia-a-dia da maioria dos desenvolvedores. Mas estes detalhes estão relacionados ao domínio do problema que é trabalhar com datas.

O que é tempo ?

A definição de Tempo não é simples, mas uma definição operacional de tempo seria: a duração da repetição de um numero finito de ciclos de um evento. O conceito está intimamente conectado ao conceito de ciclo e não é possível defini-lo sem ele, contudo, podemos também entendemos o tempo como a sucessão linear de eventos.

Sendo o tempo a sucessão linear de eventos, gostaríamos que poder ordenar esses eventos conforma a ordem em que se sucedem. Para isso inventá-mos o conceito de tempo de referencia e unidade temporal ( como o segundo). Porque todas as medições que podemos fazer são apenas de intervalos precisamos considerar um evento comum com o qual comparar todos os intervalos. Este evento marca uma época, e várias épocas são apenas formas diferentes de referencia para os intervalos de tempo. Contudo, valores de intervalos são absolutos e iguais em todas as épocas.

Toda a medição do tempo do passar do tempo é delegada a um relógio e em computação não poderia ser diferente. Todos os computadores modernos têm um relógio interno que conta o passar do tempo mesmo quando o computador está desligado e á forma de sabermos que horas são. Note-se que este relógio é um relógio universal, ou seja, ele acumula intervalos de tempo a partir de uma certa época (conhecida pelo fabricante do relógio).

O que é uma data ?

Para entender o que é uma data, precisamos primeiro entender o que é um calendário. Um calendário é um conjunto de regras que determinam como as datas mudam e como nomear as datas. em particular os calendários permitem converter tempo universal para datas e horas nesse calendário. Uma data é um marca no calendário para um evento.

Datas podem apenas, portanto, ser definidas com base em um calendário. Várias culturas definiram seus calendários e muitos deles persistem até hoje. Para evitar confusão e permitir que pessoas com culturas diferentes cheguem a um acordo sobre quanto se encontrar para um evento, a norma ISO estabelece um calendário especial baseado no Calendário Gregoriano. que define a época numa data hipotética para o nascimento de Cristo calculada a partir de eventos astronômicos e uma matemática avançada que leva em consideração os períodos de translação da lua e da terra.

Uma data é normalmente um conjunto de três números ordinais: o dia, o mês e o ano. Porque são números ordinais nenhum deles é nunca zero. A data 1/1/1970 representa o primeiro dia, do primeiro mês do milésimo nono-centésimo septuagésimo dia do calendário.

As regras de como esses números aumentam não é igual para todos os calendários. Normalmente o ordinal do dia é ligado ao passar de um dia e uma noite, ou seja a rotação completa da Terra em torno do seu eixo. O ordinal do mês aumenta quando o numero de dias do mês anterior chega num certo máximo. O numero de ano aumenta quando o numero de dias do ultimo mês aumenta além de um certo máximo. No calendário Gregoriano existem 12 meses com números de dias variando entre 28 e 31. No Calendário Hebraico, por exemplo, o numero de meses é variável podendo chegar a 13.

Em java o objeto Calendar define o calendário a ser usado. O calendário a ser usado é determinado conforme a localização da JVM (ver Locale), ou seja, depende do pais para o qual a JVM está configurada. Java conta ainda com a classe Date que foi originalmente usada para trabalha com datas e converter datas de e para String Contudo esta classe não foi desenhada num modelo internacionalizável (não tem o conceito de calendário) servindo hoje apenas como um Value Object, ou tipo forte para datas.