Data Juliana em AdvPL

Introdução

Neste final de semana um amigo me perguntou se tinha alguma função AdvPL que fosse capaz de converter uma data do nosso calendário (gregoriano) representada por dia, mês e ano, em uma data Juliana.

Problemática e Pesquisa

Na verdade nem eu sabia o que era uma “data Juliana”, até realizar uma pesquisa. Trocando em miúdos, uma data Juliana é representada em um número de dias decorridos a partir do “dia zero”, ou data de início do calendário. No caso, a “data zero” do calendário Juliano no calendário Gregoriano é  24/11/4714 ac. Logo, a data Juliana 2458588 no nosso calendário refere-se ao dia 14 de Abril de 2019, pois este foi o número de dias decorridos desde 24/11/4714 ac até 14/04/2019 (dc).

Nas pesquisas, encontrei e cheguei até a implementar uma função matemática que realizaria este cálculo, a partir de uma data qualquer, encontrar a data Juliana correspondente. Porém, estava um pouco difícil fazer o contrário — a partir de uma data Juliana, determinar sua representação no calendário gregoriano.

Solução

Por incrível que pareça, a solução para isso em AdvPL, ou qualquer outra linguagem que seja capaz de calcular um intervalo em dias a partir de uma data qualquer é muito simples. Se a linguagem permite calcular uma diferença entre datas, e permite somar ou subtrair um número de dias a partir de uma data qualquer, basta fazer o seguinte:

  1. Estipular uma “data zero” como base de cálculo. Por exemplo , 01/01/1980.
  2. Encontrar a data Juliana correspondente — no caso, 2444240.
  3. Para encontrar a data Juliana a partir de uma data qualquer, basta usar as funções de data disponíveis na sua linguagem, para determinar o número de dias decorridos desde 01/01/1980 até a data em questão, e somar 2444240.
  4. Para encontrar a data Gregoriana correspondente a uma data Juliana, basta subtrair 2444240 unidades da data Juliana para obter o número de dias decorridos desde 01/01/1980 — que pode ser um valor positivo, negativo ou mesmo zero — e depois partir da data 01/01/1980 e adicionar esta diferença, obtendo a data.

Em AdvPL

// ----------------------------------------
// Converte Data Juliana em Data AdvPL 
STATIC Function Date2DJ(dDate)
Return (dDate - ctod("01/01/1980")) + 2444240 

// ----------------------------------------
// Converte Data Juliana em Data AdvPL 
STATIC Function DJ2Date(nDJ)
Return ctod("01/01/1980") + ( nDJ - 2444240 )

Conclusão

Sim, pode ser feito, e de forma simples. Agradecimentos ao meu amigo Marcos Gomes, cuja dúvida me ajudou a conhecer mais um pouco sobre Calendários 😉

Referências

 

 

4 respostas em “Data Juliana em AdvPL

  1. Olá!
    Estou fazendo um programa para fazer esse cálculo da data juliana para o CNAB do Bradesco no Protheus, muito bom seu post!
    Só não entendi como chegou no valor 2444240.
    Consegue me explicar, por favor?

    Curtido por 1 pessoa

    • Opa, sim … Com o AdvPl consegue fazer calculo com diferenças de datas, e uma data juliana é a diferenca de dias para uma data “zero” do calendario, eu escolhi um dia fixo no calendario gregoriano ( 01/01/1980 ) , e a data juliana correspondente é 2444240. 😀

      Curtir

Deixe um comentário