O padrão SQL afirma que “Dentro da definição de um literal de data e hora”, os “valores de data e hora” são limitados pelas regras naturais para datas e horas segundo o calendário gregoriano. O PostgreSQL segue o estabelecido pelo padrão SQL, contando as datas exclusivamente pelo calendário gregoriano, mesmo em anos anteriores a este calendário estar em uso. Esta regra é conhecida como calendário gregoriano proléptico [193].
O calendário juliano foi introduzido por Júlio César em 45 aC. Era de uso comum no mundo ocidental até o ano de 1582, quando os países começaram a mudar para o calendário gregoriano. No calendário juliano, o ano tropical é aproximado como 365 1/4 dias = 365,25 dias, dando um erro de cerca de 1 dia a cada 128 anos.
O acúmulo de erros no calendário levou o Papa Gregório XIII a reformá-lo segundo as instruções do Concílio de Trento. No calendário gregoriano, o ano tropical tem aproximadamente 365 + (97 / 400) dias = 365,2425 dias. Assim, leva aproximadamente 3.300 anos para o ano tropical se deslocar um dia em relação ao calendário gregoriano.
A aproximação 365 + (97/400) é obtida tendo 97 anos bissextos a cada 400 anos, usando as seguintes regras:
| Todo ano divisível por 4 é um ano bissexto. |
| No entanto, todo ano divisível por 100 não é um ano bissexto. |
| No entanto, todo ano divisível por 400 é um ano bissexto, afinal. |
Portanto, 1700, 1800, 1900, 2100 e 2200 não são anos bissextos. Mas 1600, 2000 e 2400 são anos bissextos. Em contraste, no antigo calendário juliano, todos os anos divisíveis por 4 são bissextos.
A bula papal de fevereiro de 1582 decretou que deveriam ser retirados 10 dias de outubro de 1582, de modo que 15 de outubro deveria vir logo após 4 de outubro. Isto foi observado na Itália, Polônia, Portugal e Espanha. Outros países católicos seguiram pouco depois, mas os países protestantes relutaram em mudar, e os países ortodoxos gregos não mudaram até o início do século XX. A reforma foi observada pela Grã-Bretanha e seus domínios (incluindo o que é hoje os EUA) em 1752. Assim, 2 de setembro de 1752 foi seguido por 14 de setembro de 1752. É por isto que os sistemas Unix contendo o programa cal produzem o seguinte:
$ cal 9 1752
setembro 1752
do se te qu qu se sá
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Mas, claro, este calendário só é válido para a Grã-Bretanha e seus domínios, e não para outros países. Como seria difícil e confuso tentar rastrear os calendários reais que estavam em uso em vários países em vários momentos, o PostgreSQL não tenta, segue as regras do calendário gregoriano para todas as datas, embora este método não seja historicamente preciso.
Foram desenvolvidos diferentes calendários em várias partes do mundo, muitos deles anteriores ao calendário gregoriano. Por exemplo, o início do calendário chinês remonta ao século XIV aC. Reza a lenda que o imperador Huangdi inventou este calendário em 2637 AC. A República Popular da China usa o calendário gregoriano para fins civis. O calendário chinês é usado para determinar as festividades.
Exemplo B.1. Exemplo do tradutor
Função para testar se o ano é bissexto
Esta função retorna verdade se o ano for bissexto, ou falso se o ano não for bissexto, segundo a regra do calendário gregoriano, onde o ano será bissexto se for divisível por quatro, mas não for divisível por cem, a não ser que seja divisível por quatrocentos.
Esta rotina é proléptica, porque usa a regra do calendário gregoriano mesmo em anos anteriores a implementação desse calendário. Para Itália, Polônia, Portugal e Espanha esta regra só deveria valer a partir de 1582, e na Inglaterra só a partir de 1752.
CREATE OR REPLACE FUNCTION bissexto (ano INTEGER) RETURNS BOOLEAN AS
$CORPO$
BEGIN
CASE
WHEN mod(ano, 400) = 0 THEN RETURN true;
WHEN mod(ano, 100) = 0 THEN RETURN false;
WHEN mod(ano, 4) = 0 THEN RETURN true;
ELSE
RETURN false;
END CASE;
END;
$CORPO$
LANGUAGE plpgsql;
Curiosidade:
Miguel de Cervantes Saavedra morreu na Espanha (Madrid) em 22 de abril de 1616;
William Shakespeare morreu na Inglaterra (Stratford-upon-Avon) em 23 de abril de 1616;
Pergunta:
Como a Espanha já usava o calendário Gregoriano nesta época, e a Inglaterra ainda não, quantos dias se passaram entre a morte de Cervantes e a de Shakespeare?
[193] proléptico: A representação anacrônica de algo como existindo antes de seu tempo próprio ou histórico, como em EUA pré-colonial. (The Free Dictionary) (N. T.)