Comment valider un calcul du calendrier chinois
Les dates de référence
Validez séparément la conversion des dates lunaires, les horaires des termes solaires, les classifications de l’almanach et le comportement de l’interface. Une concordance dans une partie n’établit pas l’exactitude des autres. Un ensemble utile de vérifications comprend les limites de mois et d’année autant que des dates à l’intérieur d’un mois.
Choisissez une référence indépendante dont la convention calendaire et la période couverte sont indiquées. Un deuxième site utilisant le même moteur de calcul peut reproduire les mêmes erreurs. Consignez l’édition ou la version de la référence à côté des valeurs attendues pour pouvoir retracer un changement ultérieur.
L’Atlas prend en charge les dates civiles de l’an 1 à 2100 de notre ère. Son moteur de calcul, dont la version est fixée, utilise les dates civiles juliennes jusqu’au 1582-10-04, suivi du 1582-10-15 grégorien. Les dates du 5 au 14 octobre n’existent pas dans cette succession de dates civiles. Une comparaison utilisant le calendrier grégorien étendu dans le passé avant son introduction, appelé calendrier grégorien proleptique, teste une autre correspondance pour les dates anciennes.
Cette convention décrit les désignations de dates civiles du logiciel. Elle n’établit pas quel calendrier était historiquement utilisé en Chine. Testez les bornes prises en charge et le traitement des dates situées en dehors. Une plage de dates civiles diffère également d’une plage d’années lunaires complètes, dont les limites tombent à d’autres jours.
Enregistrez chaque résultat sous la forme complète suivante : date civile et convention calendaire, année lunaire, numéro du mois lunaire, indicateur intercalaire et jour lunaire. Distinguez le numéro du mois de sa position dans l’année : le sixième mois intercalaire est le septième mois dans l’ordre chronologique, mais son numéro reste six.
Les cas de test
Les vérifications de dates exactes
Ces dates couvrent le Nouvel An chinois, un jour intercalaire grégorien valide et les deux extrémités de mois lunaires ordinaires et intercalaires. Dans ce tableau, le millésime de l’année lunaire est l’année grégorienne dans laquelle celle-ci commence. « Ordinaire » signifie que l’indicateur intercalaire est faux.
| Date grégorienne | Année lunaire | Mois | Type | Jour lunaire |
|---|---|---|---|---|
| 2024-02-09 | 2023 | 12 | Ordinaire | 30 |
| 2024-02-10 | 2024 | 1 | Ordinaire | 1 |
| 2024-02-29 | 2024 | 1 | Ordinaire | 20 |
| 2025-07-24 | 2025 | 6 | Ordinaire | 30 |
| 2025-07-25 | 2025 | 6 | Intercalaire | 1 |
| 2025-08-22 | 2025 | 6 | Intercalaire | 29 |
| 2025-08-23 | 2025 | 7 | Ordinaire | 1 |
| 2033-12-21 | 2033 | 11 | Ordinaire | 30 |
| 2033-12-22 | 2033 | 11 | Intercalaire | 1 |
| 2034-01-19 | 2033 | 11 | Intercalaire | 29 |
| 2034-01-20 | 2033 | 12 | Ordinaire | 1 |
| 2034-02-19 | 2034 | 1 | Ordinaire | 1 |
Effectuez la conversion de chaque date dans les deux sens. La conversion grégorien-lunaire doit produire les quatre champs lunaires, et la conversion lunaire-grégorien doit retrouver la date indiquée. Testez ensuite toute la succession autour de la limite, et pas seulement son premier jour. Cela distingue un début de mois erroné d’un libellé d’affichage qui omet l’indicateur intercalaire.
Un aller-retour ne suffit pas à établir l’exactitude. Deux fonctions peuvent partager la même table erronée tout en s’inversant parfaitement. La comparaison avec des valeurs attendues indépendantes constitue une vérification distincte. Une comparaison exhaustive doit consigner le nombre de dates comparées, la référence utilisée et chaque divergence.
Les vérifications de structure et de saisie
| Vérification | Comportement attendu |
|---|---|
| Avancer à partir du dernier jour d’un mois lunaire | Atteindre le premier jour du mois chronologique suivant, avec le bon numéro de mois, le bon indicateur intercalaire et la bonne année lunaire |
| Passer d’un mois ordinaire à son mois intercalaire | Répéter le numéro du mois et faire passer l’indicateur intercalaire à vrai |
| Passer d’un mois intercalaire au mois suivant | Effacer l’indicateur intercalaire et avancer le numéro du mois, y compris tout changement d’année nécessaire |
| Demander le jour 30 du sixième mois intercalaire de 29 jours en 2025 | Rejeter cette date lunaire inexistante |
| Demander un mois intercalaire dans une année où il n’existe pas | Rejeter la date plutôt que lui substituer le mois ordinaire |
| Saisir le 29 février 2000, puis le 29 février 2100 | Accepter la première date grégorienne et rejeter la seconde |
| Saisir le 29 février 1500 selon la convention julienne de l’Atlas | L’accepter comme date julienne valide |
| Avancer d’un jour civil à partir du 1582-10-04 selon la convention de transition de l’Atlas | Atteindre le 1582-10-15, exactement un jour écoulé plus tard |
| Convertir une date valide en date lunaire, puis revenir à la date initiale | Retrouver la date d’origine sans perdre l’identité du mois intercalaire |
Le calendrier julien ajoute un jour intercalaire tous les quatre ans. La règle grégorienne exclut les années séculaires, sauf si elles sont divisibles par 400 : c’est pourquoi un test de jour intercalaire doit préciser le calendrier civil.
Les tests de rejet décrivent une interface stricte de saisie de dates. Une bibliothèque sous-jacente peut aussi proposer une normalisation documentée, par exemple reporter un jour hors limites dans le mois suivant. Testez ces comportements séparément au lieu de prendre une valeur normalisée pour la saisie originale.
Les vérifications de l’interface
Testez le changement de langue, l’actualisation du navigateur, la navigation entre les mois et l’entrée de l’Almanach séparément des fonctions de conversion. Un changement de langue doit conserver la date sélectionnée et le mois affiché. Parcourir un autre mois doit conserver le jour sélectionné jusqu’au choix d’un nouveau jour. Vérifiez que l’entrée de l’Almanach s’ouvre sur la date grégorienne locale de l’appareil et qu’une page permanente de date conserve sa date civile écrite dans un autre fuseau horaire.
Incluez un instant de test où la date locale de l’appareil diffère de la date de référence du calendrier. Cela permet de détecter l’erreur consistant à utiliser l’heure de référence astronomique pour choisir la date de l’Almanach, ou l’horloge du navigateur pour reconstituer les limites des mois lunaires.
Les termes solaires et les limites de période
Une comparaison de termes solaires doit préciser l’identité du terme, la date civile, l’heure, la référence horaire et la précision publiée. Ramenez les deux valeurs au même calendrier civil et à la même référence horaire avant de les comparer. Une heure publiée à la minute ne permet pas d’établir une concordance à la seconde.
Testez la date calendaire attribuée séparément de la tolérance sur l’horodatage. Une différence inférieure à une minute peut être acceptable pour un affichage arrondi tout en plaçant un événement du mauvais côté de minuit. Documentez toute incertitude connue pour cette limite particulière au lieu d’élargir la tolérance pour toutes les dates.
Incluez une nouvelle lune et un terme principal survenant à la même date de référence. Le terme appartient au nouveau mois calendaire même si son instant précède la conjonction. Un test fondé uniquement sur l’ordre des horodatages des événements peut manquer cette distinction.
Pour la numérotation des mois intercalaires, incluez la séquence 2033–2034. Le huitième mois ordinaire de 2033 et le premier mois de 2034 n’ont pas de terme principal, tandis que le mois intercalaire situé entre les deux porte le numéro onze. Un calcul qui traite chaque mois sans terme principal comme intercalaire échouera à ces vérifications.
Les vérifications de l’almanach et des dates historiques
Les classifications de l’almanach
Yi signifie activités propices et Ji activités à éviter. Une concordance sur une nouvelle lune ou une date lunaire ne valide pas ces listes. Testez leurs règles de consultation à partir de la convention d’almanach ou du jeu de données choisi, puis vérifiez séparément les libellés anglais des activités. Un résultat explicite « aucune » doit aussi rester distinct de données manquantes.
Lorsqu’une classification de l’almanach change à un terme solaire, consignez si sa limite est le début du jour calendaire de ce terme ou son instant exact. Testez les deux côtés de la limite choisie. Ces classifications mensuelles ne changent pas nécessairement au début d’un mois lunaire.
Le Ganzhi, cycle des troncs et des branches, exige lui aussi une limite d’année déclarée. Une désignation annuelle fondée sur le Nouvel An chinois et une autre fondée sur le Début du printemps, ou Lichun, peuvent différer dans l’intervalle entre ces limites. Comparez chaque champ selon sa convention indiquée.
La conversion historique
Pour un document historique, établissez sa dynastie ou son année d’ère, sa localité, la désignation du mois, la mention intercalaire et tout jour Ganzhi enregistré avant de choisir une méthode de conversion. Les calendriers anciens utilisaient des méthodes astronomiques et des conventions horaires différentes. Un calcul moderne étendu vers le passé peut donc différer du calendrier réellement utilisé pour le document.
Conservez la transcription, son interprétation et la date convertie dans des champs distincts. Lorsqu’un document fournit à la fois une date numérotée et un jour Ganzhi, vérifiez leur concordance plutôt que d’en écarter un pour faire correspondre l’autre.