Esse artigo faz parte da revista Clube Delphi edição 48. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.

 

Horas e Datas em IB/FB

Operações com campos temporais no InterBase/Firebird

 

Os campos DATE, TIME e TIMESTAMP sempre foram cercados de um certo mistério, principalmente para os novos usuários. A introdução do dialeto 3 no IB 6.0 e a conseqüente mudança de nomenclatura e de significado dos campos DATE contribuíram ainda mais para a possível confusão dos usuários entre os tipos de data e hora. Neste artigo, apresento os três tipos de dados existentes no InterBase/Firebird (IB/FB), para manipular data, hora e data+hora, mostrando exemplos práticos de sua utilização.

 

Tipos disponíveis

Nas versões anteriores ao IB 6.0, o único tipo de dados existente para manipular data e/ou hora era DATE, que armazenava juntamente a data e a hora. Não havia tipos para armazenar datas ou horas separadamente. As novidades que vieram com o IB 6.0 – entre elas, os dialetos – acabaram com essa “limitação”.

O principal motivo da introdução de dialetos nos bancos de dados (BDs) foi, justamente, oferecer um meio de disponibilizar novos tipos e funcionalidades sem quebrar a compatibilidade com os bancos anteriores ao IB 6.0. Um banco gerado em uma versão anterior à 6.0 é tratado sempre como dialeto 1. Neste dialeto, o antigo tipo DATE é interpretado como TIMESTAMP, e continua sendo o único disponível para manipulação de datas e horas. Já nos BDs criados no dialeto 3, existem três tipos de dados temporais, conforme a tabela abaixo:

 

Tipo

Descrição

Intervalo Permitido

TIMESTAMP

Substituto do antigo tipo DATE, armazena um par de composto por data + hora

(Veja intervalos abaixo)

DATE

Armazena somente uma data (ano, mês e dia)

1/01/0001 a 31/12/9999

TIME

Armazena somente uma hora (hora, minuto, segundos e frações de segundo)

00:00 AM a 23:59.9999 PM

Tabela1. Tipos de dados temporais

 

Dica: O dialeto 1 é mantido apenas para efeito de compatibilidade. Todos os novos bancos devem ser criados no dialeto 3 que oferece mais recursos e facilidades.

 

No restante deste artigo vamos trabalhar somente com tipos do dialeto 3. Note que tanto o tipo DATE, quanto os tipos TIME e TIMESTAMP, são armazenados internamente no banco como uma Longword (32 bits).

 

Modified Julian Date (MJD)

O InterBase e o Firebird utilizam um formato interno para o cálculo de datas, chamado Modified Julian Dates – MJD, que consiste em uma versão modificada do sistema Juliano. No sistema Juliano, o calendário começa ao meio-dia de 01/01/4713 a.c.; já no MJD, o início é 17/11/1858, ou seja, 2.400.000 dias e meio após a data inicial do sistema Juliano. Esse número não foi escolhido por acaso. Se você está curioso para saber mais sobre os sistemas MJD e o Juliano clássico, consulte os links ...

Quer ler esse conteúdo completo? Tenha acesso completo