Hoe je een Chinese kalenderberekening controleert

Referentiedatums

Controleer de omzetting van datums in de maankalender, de tijdstippen van zonnetermen, almanakclassificaties en het gedrag van de interface afzonderlijk. Overeenstemming in één onderdeel bewijst niet dat de andere onderdelen juist zijn. Een bruikbare reeks controles omvat naast datums binnen een maand ook maand- en jaargrenzen.

Kies een onafhankelijke referentie met een vermelde kalenderconventie en dekking. Een tweede website met dezelfde rekenkern kan dezelfde fouten herhalen. Leg de editie of versie van de referentie vast naast de verwachte waarden, zodat een latere wijziging kan worden nagegaan.

De Atlas ondersteunt burgerlijke datums van 1 tot en met 2100 n.Chr. De vastgelegde versie van de rekenkern gebruikt juliaanse burgerlijke datums tot en met 1582-10-04, gevolgd door de gregoriaanse datum 1582-10-15. Van 5 oktober tot en met 14 oktober komen geen datums voor in die burgerlijke datumreeks. Een vergelijking met de gregoriaanse kalender die vóór zijn invoering naar het verleden is doorgetrokken, de proleptische gregoriaanse kalender, toetst voor eerdere datums een andere koppeling.

Deze conventie beschrijft de burgerlijke datumlabels van de software. Ze stelt niet vast welke kalender historisch in China werd gebruikt. Test de ondersteunde eindpunten en de verwerking van datums daarbuiten. Een bereik van burgerlijke datums verschilt ook van een bereik van volledige maanjaren, waarvan de grenzen op andere dagen vallen.

Sla elk resultaat op met de volledige burgerlijke datum en kalenderconventie, het maanjaar, het nummer van de maanmaand, de schrikkelvlag en de dag van de maanmaand. Onderscheid het maandnummer van de positie in het jaar: schrikkelmaand zes is chronologisch de zevende maand, maar het maandnummer blijft zes.

Testgevallen

Exacte datumcontroles

Deze datums omvatten Chinees Nieuwjaar, een geldige gregoriaanse schrikkeldag en beide uiteinden van gewone maanmaanden en schrikkelmaanden. In deze tabel is de maanjaaraanduiding het gregoriaanse jaar waarin dat maanjaar begint. “Gewoon” betekent dat de schrikkelvlag op false staat.

Gregoriaanse datumMaanjaarMaandSoortDag van de maanmaand
2024-02-09202312Gewoon30
2024-02-1020241Gewoon1
2024-02-2920241Gewoon20
2025-07-2420256Gewoon30
2025-07-2520256Schrikkelmaand1
2025-08-2220256Schrikkelmaand29
2025-08-2320257Gewoon1
2033-12-21203311Gewoon30
2033-12-22203311Schrikkelmaand1
2034-01-19203311Schrikkelmaand29
2034-01-20203312Gewoon1
2034-02-1920341Gewoon1

Voer elke datum in beide richtingen door de omzetting. Omzetting van gregoriaans naar de maankalender moet alle vier de maankalendervelden opleveren, en omzetting terug naar gregoriaans moet de vermelde datum herstellen. Test daarna de hele reeks rond de grens, niet alleen de eerste dag. Zo wordt een verkeerd maandbegin onderscheiden van een weergavelabel dat de schrikkelvlag weglaat.

Een heen-en-terugomzetting alleen kan de juistheid niet vaststellen. Twee functies kunnen dezelfde foutieve tabel gebruiken en elkaar toch perfect ongedaan maken. Vergelijken met onafhankelijke verwachte waarden is een afzonderlijke controle. Een uitputtende vergelijking moet vastleggen hoeveel datums zijn vergeleken, welke referentie is gebruikt en welke verschillen er zijn gevonden.

Structuur- en invoercontroles

ControleVerwacht gedrag
Verdergaan vanaf de laatste dag van een maanmaandDag één van de chronologisch volgende maand, met het juiste maandnummer, de juiste schrikkelvlag en het juiste maanjaar
Verdergaan van een gewone maand naar haar schrikkelmaandHet maandnummer herhalen en de schrikkelvlag op true zetten
Verdergaan van een schrikkelmaand naar de volgende maandDe schrikkelvlag wissen en het maandnummer verhogen, met zo nodig de overgang naar een nieuw jaar
Dag 30 opvragen van de 29 dagen lange schrikkelmaand zes in 2025De niet-bestaande datum in de maankalender afwijzen
Een schrikkelmaand opvragen in een jaar waarin die schrikkelmaand niet voorkomtDeze afwijzen in plaats van de gewone maand ervoor in de plaats te zetten
Eerst 29 februari 2000 invoeren en daarna 29 februari 2100De eerste gregoriaanse datum accepteren en de tweede afwijzen
29 februari 1500 invoeren volgens de juliaanse conventie van de AtlasDeze accepteren als geldige juliaanse datum
Eén burgerlijke dag verdergaan vanaf 1582-10-04 volgens de overgangsconventie van de AtlasUitkomen op 1582-10-15, precies één verstreken dag later
Een geldige datum naar de maankalender omzetten en terugDe oorspronkelijke datum herstellen zonder de identiteit van de schrikkelmaand te verliezen

De juliaanse kalender voegt elk vierde jaar een schrikkeldag toe. De gregoriaanse regel sluit eeuwjaren uit, tenzij ze deelbaar zijn door 400. Daarom moet bij een schrikkeldagtest worden aangegeven welke burgerlijke kalender wordt gebruikt.

De afwijzingscontroles beschrijven een interface met strikte datuminvoer. Een onderliggende bibliotheek kan ook gedocumenteerde normalisatie aanbieden, zoals het doorschuiven van een dag buiten het geldige bereik naar de volgende maand. Test deze gedragingen afzonderlijk, in plaats van een genormaliseerde waarde voor de oorspronkelijke invoer aan te zien.

Interfacecontroles

Test het wisselen van taal, het vernieuwen van de browserpagina, de maandnavigatie en de Almanakvermelding afzonderlijk van de omzettingsfuncties. Bij een taalwisseling moeten de geselecteerde datum en de weergegeven maand behouden blijven. Bij het doorbladeren van een andere maand moet de geselecteerde dag behouden blijven totdat een nieuwe dag wordt gekozen. Controleer of de Almanakvermelding de lokale gregoriaanse datum van het apparaat opent en of een permanente datumpagina in een andere tijdzone de erop geschreven burgerlijke datum behoudt.

Neem een testmoment op waarop de lokale datum van het apparaat verschilt van de referentiedatum van de kalender. Dit spoort de fout op waarbij de astronomische referentieklok wordt gebruikt om de datum van de Almanak te kiezen, of de browserklok om de grenzen van de maanmaanden te reconstrueren.

Zonnetermen en grenzen

Voor een vergelijking van zonnetermen zijn de identiteit van de term, de burgerlijke datum, de tijd, de tijdstandaard en de gepubliceerde precisie nodig. Zet beide waarden in dezelfde burgerlijke kalender en tijdstandaard voordat je ze vergelijkt. Een tijd die tot op de minuut is gepubliceerd, kan geen overeenkomst tot op de seconde aantonen.

Test de toegewezen kalenderdatum afzonderlijk van de toegestane afwijking in het tijdstip. Een verschil van minder dan een minuut kan aanvaardbaar zijn voor een afgeronde weergave en een gebeurtenis toch aan de verkeerde kant van middernacht plaatsen. Leg bekende onzekerheid voor die specifieke grens vast in plaats van de toegestane afwijking voor alle datums te vergroten.

Neem een nieuwe maan en een hoofdterm op die op dezelfde referentiedatum plaatsvinden. De term hoort bij de nieuwe kalendermaand, ook als het moment ervan vóór de conjunctie valt. Een test die alleen op de volgorde van gebeurtenistijdstippen is gebaseerd, kan dit onderscheid missen.

Neem voor de nummering van schrikkelmaanden de reeks van 2033–2034 op. De gewone maand acht van 2033 en maand één van 2034 hebben geen hoofdterm, terwijl de tussenliggende schrikkelmaand elf is. Een berekening die elke maand zonder hoofdterm als schrikkelmaand behandelt, slaagt niet voor deze controles.

Almanakcontroles en historische controles

Almanakclassificaties

Yi betekent geschikte activiteiten en Ji betekent te vermijden activiteiten. Overeenstemming over een nieuwe maan of een datum in de maankalender bevestigt de juistheid van deze lijsten niet. Test hun opzoekregels aan de hand van de gekozen almanakconventie of gegevensverzameling en controleer daarna de Nederlandse activiteitenlabels afzonderlijk. Een expliciete uitkomst “geen” moet ook te onderscheiden blijven van ontbrekende gegevens.

Wanneer een almanakclassificatie bij een zonneterm verandert, leg dan vast of de grens het begin van de kalenderdag van die term is of het exacte moment van de term. Test beide kanten van de gekozen grens. Deze maandclassificaties hoeven niet bij het begin van een maanmaand te veranderen.

Ook voor Ganzhi, de stam-takcyclus, is een vastgelegde jaargrens nodig. Een jaaraanduiding op basis van Chinees Nieuwjaar kan in het interval tussen de twee grenzen verschillen van een aanduiding op basis van Begin van de lente, ofwel Lichun. Vergelijk elk veld volgens de erbij vermelde conventie.

Historische omzetting

Bepaal voor een historisch document de dynastie of het tijdperkjaar, de plaats, de maandaanduiding, de schrikkelaanduiding en een eventuele vermelde Ganzhi-dag voordat je een omzettingsmethode kiest. Oudere kalenders gebruikten andere astronomische methoden en tijdconventies. Een moderne berekening die naar het verleden is doorgetrokken, kan daardoor afwijken van de kalender die daadwerkelijk voor het document is gebruikt.

Houd de transcriptie, de interpretatie en de omgezette datum als afzonderlijke velden bij. Wanneer een document zowel een genummerde datum als een Ganzhi-dag geeft, toets dan of ze overeenstemmen, in plaats van de ene te schrappen om de andere passend te maken.

1–2100 n.Chr.

Privacybeleid