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 gregoriana | Anno lunare | Mese | Tipo | Giorno lunare |
|---|---|---|---|---|
| 2024-02-09 | 2023 | 12 | Ordinario | 30 |
| 2024-02-10 | 2024 | 1 | Ordinario | 1 |
| 2024-02-29 | 2024 | 1 | Ordinario | 20 |
| 2025-07-24 | 2025 | 6 | Ordinario | 30 |
| 2025-07-25 | 2025 | 6 | Intercalare | 1 |
| 2025-08-22 | 2025 | 6 | Intercalare | 29 |
| 2025-08-23 | 2025 | 7 | Ordinario | 1 |
| 2033-12-21 | 2033 | 11 | Ordinario | 30 |
| 2033-12-22 | 2033 | 11 | Intercalare | 1 |
| 2034-01-19 | 2033 | 11 | Intercalare | 29 |
| 2034-01-20 | 2033 | 12 | Ordinario | 1 |
| 2034-02-19 | 2034 | 1 | Ordinario | 1 |
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
| Controllo | Comportamento atteso |
|---|---|
| Avanzare dall’ultimo giorno di un mese lunare | Giorno 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 intercalare | Ripetere il numero del mese e impostare l’indicatore di mese intercalare su true |
| Avanzare da un mese intercalare al mese successivo | Disattivare 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 2025 | Rifiutare la data lunare inesistente |
| Richiedere un mese intercalare in un anno nel quale quel mese intercalare non ricorre | Rifiutarlo, anziché sostituirlo con il mese ordinario |
| Inserire il 29 febbraio 2000 e poi il 29 febbraio 2100 | Accettare la prima data gregoriana e rifiutare la seconda |
| Inserire il 29 febbraio 1500 secondo la convenzione giuliana dell’Atlante | Accettarlo come data giuliana valida |
| Avanzare di un giorno civile dal 1582-10-04 secondo la convenzione di passaggio dell’Atlante | Raggiungere il 1582-10-15, esattamente un giorno trascorso più tardi |
| Convertire una data valida in lunare e poi riconvertirla | Restituire 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.