Giorno giuliano

Il giorno giuliano (Julian Day, JD) è il numero di giorni passati dal mezzogiorno del lunedì 1º gennaio 4713 a.C. Il sistema dei giorni giuliani è stato progettato per fornire agli astronomi un singolo sistema di date che potesse essere usato per lavorare con differenti calendari, e per unificare differenti cronologie storiche, giacché esso non presenta la difficoltà di anni bisestili, cambi di calendario, eccetera.

La data giuliana è il giorno giuliano combinato con la frazione di giorno trascorso, a partire dal mezzogiorno del tempo universale (precedentemente chiamato GMT, Greenwich Mean Time). La frazione è trovata dividendo il tempo, espresso in ore, per 24 (ponendo 00:00 uguale a mezzogiorno, e 12:00 mezzanotte). L'espressione data giuliana è anche usata per riferirsi a una data del calendario giuliano, oppure a una data ordinale (l'anno e il numero del giorno dell'anno), perciò occorre fare attenzione a cosa ci si riferisce.

Gli astronomi utilizzano spesso un anno giuliano di esattamente 365,25 giorni per le effemeridi, per facilitare i conti, mentre per il calcolo di alcuni coefficienti usano il secolo giuliano, di esattamente 36525 giorni.

Storia

Giuseppe Scaligero

Il giorno giuliano è basato sul periodo giuliano proposto da Giuseppe Scaligero nel 1583, al tempo della riforma del calendario gregoriano. È un multiplo di tre cicli di calendario:

15 (ciclo dell'indizione) × 19 (ciclo metonico) × 28 (ciclo solare) = 7980 anni

La sua epoca (punto iniziale) è posta l'ultima volta che tutti questi tre cicli si trovavano assieme nel loro primo anno, e Scaligero la scelse perché era precedente a tutte le date storiche conosciute.

Nel suo libro Lineamenti di astronomia, pubblicato nel 1849, l'astronomo John Herschel raccomandò di utilizzare una versione dello schema di Scaligero per realizzare un sistema standard di date astronomiche, contando il "giorno del periodo giuliano". Questo sistema è diventato il sistema standard dei giorni giuliani. Il sistema ha il vantaggio di poter calcolare facilmente relazioni tra date lontane (per esempio nello studio di antichi scritti), e perché il punto iniziale a mezzogiorno fa cadere un'intera notte di osservazioni in un solo giorno giuliano, invece che in due.

Anche se molte fonti dicono che la parola giuliano si riferisce al padre di Scaligero, Giulio Cesare Scaligero, nell'introduzione del quinto libro del suo "Opus de emendatione temporis" ("Opera sulla correzione del tempo") Scaligero scrive: "Iulianum vocauimus: quia ad annum Iulianum dumtaxat accommodata est" che significa "Lo abbiamo chiamato Giuliano: poiché si conforma solamente all'anno Giuliano", intendendo il calendario giuliano introdotto da Gaio Giulio Cesare nel 46 a.C.

Calcolo

Conversione da data normale a data giuliana

Il seguente algoritmo è valido dal 4712 a.C. in poi; inoltre tiene conto della riforma gregoriana, tramite cui si passò direttamente dal 4 ottobre 1582 al 15 ottobre dello stesso anno. L'ora è da intendersi in formato 24h ed espresso in UT.

inputs: dataAttuale, oraAttuale, reset(2415020.50);

// Estrazione Valori dalla data, per esempio, 12 febbraio 1980
anno = anno ( dataAttuale ); // 1980
mese = mese ( dataAttuale ); // 02
giorno = giorno ( dataAttuale ); // 12

// Estrazione Valori dall'ora, per esempio, 15:32.12
ore = ora ( oraAttuale ); // 15
minuti = minuti ( oraAttuale ); // 32
secondi = secondi ( oraAttuale ); // 12

if mese = 1 or mese = 2 then begin
  anno = anno - 1;
  mese = mese + 12;
end;

if dataAttuale < " 15 ottobre 1582 " then begin
  a = 0;
  b = 0;
end else begin
  a = ParteIntera( anno / 100 );
  b = 2 - a + ParteIntera( a / 4 );
end;

c = ParteIntera( 365.25 * anno );
d = ParteIntera( 30.6001 * ( mese + 1 ) );

// attualmente si riferisce all'inizio della giornata, in più viene sottratto
// un reset che permette di avere una migliore definizione della parte decimale
// (limiti rappresentativi dipendenti dalle strutture dati); il reset indicato
// si riferisce al 1º gennaio 1900, ma è una scelta mia arbitraria

dataGiuliana = b + c + d + giorno + 1720994.50 - reset;

// ora la definizione del punto della giornata dipende dall'utilizzo, e se ne sceglie
// solamente una delle seguenti

// 1. definizione all'ora (non mi interessano i minuti e i secondi)
offsetGiornata = ore / 24;

// 2. definizione al minuto (non mi interessano i secondi)
offsetGiornata = ( 60 * ore + minuti ) / 1440;

// 3. definizione al secondo
offsetGiornata = ( 3600 * ore + 60 * minuti + secondi ) / 86400;

// data giuliana completa
dataGiuliana = dataGiuliana + offsetGiornata;

Accenni matematici:

  1. ParteIntera(numero): restituisce la parte intera del numero (19.5 → 19)
  2. ParteDecimale(numero): restituisce la parte decimale del numero (19.5 → 0.5)
  3. Troncamento(numero,decimali): restituisce il numero con decimali pari a quelli voluti, senza arrotondare ([0.12345,3] → 0.123)
  4. Modulo(dividendo,divisore): restituisce il resto della divisione intera tra dividendo/divisore ([24,23] → 1)

Note: l'algoritmo richiede un certo livello di precisione nella parte decimale (es. 10 decimali con offset al minuto)

Conversione da data giuliana a data normale

Questo algoritmo serve per invertire il precedente; si noti che i decimali di troncamento (parametro) dipendono in particolare dalle variabili usate nell'implementazione, più sono i decimali e meglio è, ed in questo caso ne vengono utilizzati 9 poiché bastano.

inputs: dataGiuliana, reset(2415020.50), decimaliTroncamento(9); 
 
// riaggiusto la mia data con il reset usato nella conversione
jd = dataGiuliana + reset;

i = ParteIntera( jd + 0.5 );
f = ParteDecimale( jd + 0.5 );

if i <= 2299160 then begin
  b = i;
end else begin
  a = ParteIntera( ( i - 1867216.25 ) / 36524.25 );
  b = i + 1 + a - ParteIntera( a / 4);
end;

c = b + 1524;
d = ParteIntera( ( c - 122.1 ) / 365.25 );
e = ParteIntera( 365.25 * d );
h = ParteIntera( ( c - e ) / 30.6001 );

giorno = c - e + f - parteIntera( 30.6001 * h );

if h < 14 then begin
  mese = h - 1;
end else begin
  mese = h - 13;
end;

if mese < 3 then begin
  anno = d - 4715;
end else begin
  anno = d - 4716;
end;

// a questo punto ho estratto la data normale
dataAttuale = creaData ( ParteIntera( anno ), ParteIntera( mese ), ParteIntera( giorno ) );

// ora estraggo l'ora dalla giornata, tenendo presente la rappresentazione usata in
// precedenza nella conversione, secondo le seguenti modalità

// 1. definizione all'ora (non mi interessano i minuti e i secondi)
offsetGiornata = Tronca( ParteDecimale( dataGiuliana ) * 24, 0 );
ore = offsetGiornata;
minuti = 0;
secondi = 0;

// 2. definizione al minuto (non mi interessano i secondi)
offsetGiornata = Tronca( ParteDecimale( dataGiuliana ) * 1440, decimaliTroncamento );
ore = ParteIntera( offsetGiornata / 60 );
minuti = offsetGiornata - 60 * ore ; 
secondi = 0;

// 3. definizione al secondo
offsetGiornata = Tronca( ParteDecimale( dataGiuliana ) * 86400, decimaliTroncamento );
ore = ParteIntera( offsetGiornata / 3600 );
minuti = ParteIntera( ( offsetGiornata - 3600 * ore ) / 60 );
secondi = offsetGiornata - 3600 * ore - 60 * minuti;

// a questo punto ho estratto l'ora
oraAttuale = creaOra ( Modulo( ore, 24 ), Modulo( minuti, 60 ), Modulo( secondi, 60 ) );

Accenni matematici:

  1. ParteIntera(numero): restituisce la parte intera del numero (19.5 → 19)
  2. ParteDecimale(numero): restituisce la parte decimale del numero (19.5 → 0.5)
  3. Troncamento(numero,decimali): restituisce il numero con decimali pari a quelli voluti, senza arrotondare ([0.12345,3] → 0.123)
  4. Modulo(dividendo,divisore): restituisce il resto della divisione intera tra dividendo/divisore ([24,23] → 1)

Note: l'algoritmo richiede un certo livello di precisione nella parte decimale (es. 10 decimali con offset al minuto)

Calcolo del giorno della settimana

// la data giuliana si intende riferita alla mezzanotte del giorno d'interesse
inputs: julian;

giornoSettimana = Mod( julian + 0.5 , 7);

Accenni matematici:

  1. Modulo(dividendo,divisore): restituisce il resto della divisione intera tra dividendo/divisore ([24,23] → 1)

Con giornoSettimana che assume i seguenti valori:

  1. il valore 0 indica il lunedì
  2. il valore 1 indica il martedì
  3. il valore 2 indica il mercoledì
  4. il valore 3 indica il giovedì
  5. il valore 4 indica il venerdì
  6. il valore 5 indica il sabato
  7. il valore 6 indica la domenica

Alternative

Poiché il punto di partenza è così lontano nel tempo, i numeri dei giorni giuliani possono essere molto grandi e difficili da maneggiare. A volte viene usato un punto di partenza più recente, per esempio semplicemente ignorando le cifre più significative, per poter entrare nella memoria limitata dei computer con una precisione sufficiente.

MJD = JD - 2400000,5
Lo spostamento di 0,5 significa che il MJD inizia e finisce alla mezzanotte del tempo universale, anziché a mezzogiorno. Il giorno MJD 1 coincide con il 18 novembre 1858.
RJD = JD - 2400000
Il giorno RJD 1 inizia quindi a mezzogiorno del 17 novembre 1858 e finisce a mezzogiorno del 18.
TJD = JD - 2440000,5
oppure come:
TJD = (JD - 0,5) mod 1000

Altre epoche

Altri sistemi di conteggio dei giorni, chiamati anche date intere, includono la Data Liliana, il cui giorno 1 è il 15 ottobre 1582 (JD 2299161, giorno dell'adozione del calendario gregoriano); Rata Die, che conta dall'inizio dell'era Cristiana, il 1º gennaio dell'anno 1 (JD 1721425).

Note

  1. ↑ Si intende il 1º gennaio 4713 a.C. secondo il calendario giuliano, ossia quello valido per le date anteriori al 15 ottobre 1582. La data corrispondente usando retroattivamente il calendario gregoriano sarebbe il 24 novembre 4714 a.C.
  2. ↑ support.microsoft.com, https://support.microsoft.com/kb/214326.
  3. 1 2 Dopo mezzogiorno.

Bibliografia

Voci correlate

Collegamenti esterni

  Portale Astronomia: accedi alle voci di Wikipedia che trattano di astronomia e astrofisica