Come verificare un calcolo del calendario cinese

Date di riferimento

Verificare separatamente la conversione delle date lunari, gli orari dei termini solari, le classificazioni dell’almanacco e il comportamento dell’interfaccia. La concordanza in una parte non dimostra che le altre siano corrette. Un insieme utile di controlli comprende i confini dei mesi e degli anni, oltre a date interne a un mese.

Scegliere una fonte di riferimento indipendente che dichiari la propria convenzione di calendario e l’intervallo coperto. Un secondo sito che usa lo stesso motore di calcolo può riprodurre gli stessi errori. Registrare l’edizione o la versione della fonte insieme ai valori attesi, così che un cambiamento successivo possa essere ricostruito.

L’Atlante supporta date civili dall’1 d.C. al 2100. Il suo motore di calcolo, fissato a una versione specifica, usa date civili giuliane fino al 1582-10-04, seguito dal 1582-10-15 gregoriano. Dal 5 al 14 ottobre le date non compaiono in quella sequenza civile. Un confronto che usa il calendario gregoriano esteso all’indietro prima della sua introduzione, chiamato calendario gregoriano prolettico, verifica una corrispondenza diversa per le date precedenti.

Questa convenzione descrive le date civili indicate dal software. Non stabilisce quale calendario fosse storicamente usato in Cina. Verificare gli estremi dell’intervallo supportato e la gestione delle date esterne a esso. Un intervallo di date civili è inoltre diverso da un intervallo di anni lunari completi, i cui confini cadono in giorni diversi.

Memorizzare ogni risultato con data civile completa e convenzione di calendario, anno lunare, numero del mese lunare, indicatore di mese intercalare e giorno lunare. Distinguere il numero del mese dalla sua posizione nell’anno: il sesto mese intercalare è il settimo mese in ordine cronologico, ma il suo numero rimane sei.

Casi di prova

Controlli su date esatte

Queste date coprono il Capodanno cinese, un giorno bisestile gregoriano valido ed entrambe le estremità di mesi lunari ordinari e intercalari. Nella tabella, l’anno lunare è identificato dall’anno gregoriano nel quale comincia. «Ordinario» significa che l’indicatore di mese intercalare è false.

Data gregorianaAnno lunareMeseTipoGiorno lunare
2024-02-09202312Ordinario30
2024-02-1020241Ordinario1
2024-02-2920241Ordinario20
2025-07-2420256Ordinario30
2025-07-2520256Intercalare1
2025-08-2220256Intercalare29
2025-08-2320257Ordinario1
2033-12-21203311Ordinario30
2033-12-22203311Intercalare1
2034-01-19203311Intercalare29
2034-01-20203312Ordinario1
2034-02-1920341Ordinario1

Eseguire la conversione di ogni data in entrambe le direzioni. La conversione da gregoriano a lunare deve produrre tutti e quattro i campi lunari e quella da lunare a gregoriano deve restituire la data indicata. Verificare poi l’intera sequenza intorno al confine, non soltanto il suo primo giorno. Questo permette di distinguere un inizio del mese errato da un’etichetta di visualizzazione che omette l’indicatore di mese intercalare.

Una sola conversione di andata e ritorno non può dimostrare l’accuratezza. Due funzioni possono condividere la stessa tabella errata e comunque annullare perfettamente l’una l’effetto dell’altra. Il confronto con valori attesi indipendenti è un controllo distinto. Un confronto esaustivo deve registrare quante date sono state confrontate, quale fonte di riferimento è stata usata e ogni discrepanza.

Controlli strutturali e sui dati in ingresso

ControlloComportamento atteso
Avanzare dall’ultimo giorno di un mese lunareGiorno uno del mese successivo in ordine cronologico, con numero del mese, indicatore di mese intercalare e anno lunare corretti
Avanzare da un mese ordinario al suo mese intercalareRipetere il numero del mese e impostare l’indicatore di mese intercalare su true
Avanzare da un mese intercalare al mese successivoDisattivare l’indicatore di mese intercalare e avanzare con il numero del mese, includendo l’eventuale passaggio d’anno necessario
Richiedere il giorno 30 del sesto mese intercalare di 29 giorni del 2025Rifiutare la data lunare inesistente
Richiedere un mese intercalare in un anno nel quale quel mese intercalare non ricorreRifiutarlo, anziché sostituirlo con il mese ordinario
Inserire il 29 febbraio 2000 e poi il 29 febbraio 2100Accettare la prima data gregoriana e rifiutare la seconda
Inserire il 29 febbraio 1500 secondo la convenzione giuliana dell’AtlanteAccettarlo come data giuliana valida
Avanzare di un giorno civile dal 1582-10-04 secondo la convenzione di passaggio dell’AtlanteRaggiungere il 1582-10-15, esattamente un giorno trascorso più tardi
Convertire una data valida in lunare e poi riconvertirlaRestituire la data originale senza perdere l’identità del mese intercalare

Il calendario giuliano aggiunge un giorno bisestile ogni quattro anni. La regola gregoriana esclude gli anni secolari, a meno che non siano divisibili per 400: per questo una prova sul giorno bisestile deve specificare il calendario civile.

I controlli di rifiuto descrivono un’interfaccia di inserimento delle date con validazione rigorosa. Una libreria sottostante può anche offrire una normalizzazione documentata, per esempio riportando un giorno fuori intervallo nel mese successivo. Verificare separatamente questi comportamenti, senza scambiare un valore normalizzato per il dato originariamente inserito.

Controlli dell’interfaccia

Verificare il cambio di lingua, l’aggiornamento del browser, la navigazione tra i mesi e la voce dell’Almanacco separatamente dalle funzioni di conversione. Un cambio di lingua deve conservare la data selezionata e il mese visualizzato. Sfogliare un altro mese deve conservare il giorno selezionato finché non ne viene scelto uno nuovo. Controllare che la voce dell’Almanacco apra la data gregoriana locale del dispositivo e che una pagina permanente dedicata a una data mantenga la data civile scritta anche in un altro fuso orario.

Includere un momento di prova nel quale la data locale del dispositivo differisca da quella di riferimento del calendario. Questo permette di rilevare l’errore di usare l’orologio di riferimento astronomico per scegliere la data della voce dell’Almanacco, oppure l’orologio del browser per ricostruire i confini dei mesi lunari.

Termini solari e confini

Un confronto dei termini solari richiede identità del termine, data civile, ora, sistema orario e precisione pubblicata. Riportare entrambi i valori nello stesso calendario civile e nello stesso sistema orario prima di confrontarli. Un orario pubblicato al minuto non può dimostrare una corrispondenza al secondo.

Verificare la data di calendario assegnata separatamente dalla tolleranza sull’orario. Una differenza inferiore a un minuto può essere accettabile per una visualizzazione arrotondata e tuttavia collocare un evento dalla parte sbagliata della mezzanotte. Documentare ogni incertezza nota per quello specifico confine, invece di ampliare la tolleranza per tutte le date.

Includere una luna nuova e un termine principale che si verifichino nella stessa data di riferimento. Il termine appartiene al nuovo mese di calendario anche se il suo istante precede la congiunzione. Una prova basata soltanto sull’ordine degli istanti degli eventi può non rilevare questa distinzione.

Per la numerazione dei mesi intercalari, includere la sequenza 2033–2034. L’ottavo mese ordinario del 2033 e il primo mese del 2034 non hanno termini principali, mentre il mese intercalare fra loro è l’undicesimo. Un calcolo che considera intercalare ogni mese privo di un termine principale non supererà questi controlli.

Controlli dell’almanacco e delle date storiche

Classificazioni dell’almanacco

Yi significa attività adatte e Ji attività da evitare. La corrispondenza di una luna nuova o di una data lunare non convalida questi elenchi. Verificarne le regole di consultazione rispetto alla convenzione o all’insieme di dati dell’almanacco scelto, poi controllare separatamente le etichette inglesi delle attività. Anche un risultato esplicito «nessuna» deve rimanere distinguibile da un dato mancante.

Quando una classificazione dell’almanacco cambia a un termine solare, registrare se il suo confine sia l’inizio del giorno di calendario di quel termine o l’istante esatto del termine. Verificare entrambi i lati del confine scelto. Queste classificazioni dei mesi non devono necessariamente cambiare all’inizio di un mese lunare.

Anche il Ganzhi, il ciclo dei tronchi e dei rami, richiede un confine d’anno dichiarato. Un’indicazione d’anno basata sul Capodanno cinese e una basata sull’Inizio della primavera, o Lichun, possono differire nell’intervallo fra quei confini. Confrontare ogni campo secondo la convenzione che dichiara di usare.

Conversione storica

Per un documento storico, stabilire la dinastia o l’anno d’era, la località, la designazione del mese, l’indicazione di intercalazione e l’eventuale giorno Ganzhi registrato prima di scegliere un metodo di conversione. I calendari precedenti usavano metodi astronomici e convenzioni temporali diversi. Un calcolo moderno esteso al passato può quindi differire dal calendario effettivamente usato nel documento.

Conservare la trascrizione, la sua interpretazione e la data convertita in campi distinti. Quando un documento fornisce sia una data numerata sia un giorno Ganzhi, verificarne la concordanza invece di scartarne uno per far tornare l’altro.

1–2100 d.C.

Informativa sulla privacy