中国暦の計算を検証する方法

照合用の日付

旧暦の日付換算、節気の時刻、暦注の分類、画面の動作は、それぞれ別に検証してください。一つの部分が一致しても、ほかの部分の正しさは立証されません。有用な検証項目には、月内の日付だけでなく、月や年の境目も含めます。

暦の取り決めと対象範囲が明記された、独立した参照資料を選んでください。同じ計算エンジンを使う別のウェブサイトは、同じ誤りを再現する可能性があります。期待値とともに参照資料の版やバージョンを記録し、後の変更を追跡できるようにします。

本サイトは、西暦1年から2100年までの民用暦の日付に対応しています。バージョンを固定した計算エンジンは、1582-10-04まではユリウス暦を使い、その翌日をグレゴリオ暦の1582-10-15とします。この民用暦の日付の並びには、10月5日から10月14日は存在しません。グレゴリオ暦を導入以前の過去に延長した先発グレゴリオ暦と比較すると、それ以前の日付については異なる対応関係を検証することになります。

この取り決めが示すのは、ソフトウェア上の民用暦の日付表示です。歴史上、中国でどの暦が使われていたかを示すものではありません。対応範囲の両端と、その外の日付の扱いを検証してください。また、民用暦の日付の範囲と、旧暦の年全体の範囲は異なります。旧暦の年の境目は別の日に当たるためです。

各結果は、完全な民用暦の日付と暦の取り決め、旧暦の年、月番号、閏月フラグ、旧暦の日として保存します。月番号と、その年で何番目の月かを区別してください。閏6月は時系列では7番目の月ですが、月番号は6のままです。

テストケース

日付の厳密な照合

次の日付は、春節、有効なグレゴリオ暦の閏日、通常の旧暦月と閏月の両端を含みます。この表で旧暦の年に使う数字は、その旧暦の年が始まるグレゴリオ暦の年です。「通常」は、閏月フラグがfalseであることを意味します。

グレゴリオ暦の日付旧暦の年種類旧暦の日
2024-02-09202312通常30
2024-02-1020241通常1
2024-02-2920241通常20
2025-07-2420256通常30
2025-07-25202561
2025-08-222025629
2025-08-2320257通常1
2033-12-21203311通常30
2033-12-222033111
2034-01-1920331129
2034-01-20203312通常1
2034-02-1920341通常1

各日付を両方向に換算します。グレゴリオ暦から旧暦への換算では旧暦の4項目すべてが得られ、旧暦からグレゴリオ暦への換算では記載の日付に戻るはずです。次に、境目の初日だけでなく、その前後の連続した日付全体を検証します。これにより、月の始まりが誤っているのか、表示が閏月フラグを落としているのかを区別できます。

往復換算だけでは正確さを立証できません。2つの関数が同じ誤った表を共有していても、互いの変換を完全に元に戻せることがあります。独立した期待値との比較は、別の検証です。網羅的な比較では、照合した日付の数、使った参照資料、すべての不一致を記録してください。

構造と入力の検証

検証内容期待する動作
旧暦の月の最終日から1日進める時系列で次の月の1日になる。月番号、閏月フラグ、旧暦の年が正しい
通常の月からその閏月へ進める月番号を繰り返し、閏月フラグをtrueにする
閏月から次の月へ進める閏月フラグを解除し、月番号を進める。必要なら年も切り替える
29日までしかない2025年の閏6月について30日を指定する存在しない旧暦の日付として拒否する
その閏月が存在しない年に、その閏月を指定する通常の月で代用せず、拒否する
2000年2月29日、次に2100年2月29日を入力する最初のグレゴリオ暦の日付は受け付け、2つ目は拒否する
本サイトのユリウス暦の取り決めで1500年2月29日を入力する有効なユリウス暦の日付として受け付ける
本サイトの改暦の取り決めで1582-10-04から暦日を1日進めるちょうど1日後の1582-10-15になる
有効な日付を旧暦に換算して元に戻す閏月の区別を失わず、元の日付に戻る

ユリウス暦は4年ごとに閏日を加えます。グレゴリオ暦の規則では、100で割り切れる年は、400でも割り切れる場合を除いて閏年にしません。そのため、閏日のテストでは民用暦を特定する必要があります。

入力を拒否する検証は、厳密に日付を受け付ける入力画面を想定しています。内部のライブラリには、範囲外の日番号を次の月へ繰り越すなど、仕様に記載された正規化機能がある場合もあります。正規化された値を元の入力と取り違えないよう、これらの動作は別に検証してください。

画面の検証

言語切り替え、ブラウザーの再読み込み、月の移動、暦注の項目は、換算関数とは別に検証します。言語を切り替えても、選択した日付と表示中の月は保たれるべきです。別の月を閲覧しても、新しい日を選ぶまでは、選択した日付を保ちます。暦注の項目が端末の現地グレゴリオ暦日付で開くことと、固定の日付ページが別の時間帯でも記載の民用暦日付を保つことを確認してください。

端末の現地日付と暦の基準日付が異なる瞬間もテストに含めます。これにより、天文計算の基準時計で暦注の項目の日付を選んでしまう誤りや、ブラウザーの時計で旧暦の月の境目を作り直してしまう誤りを検出できます。

節気と境界

節気の比較には、節気の名称、民用暦の日付、時刻、時刻基準、公表値の精度が必要です。比較する前に、両方の値を同じ民用暦と時刻基準にそろえます。分単位で公表された時刻では、秒単位の一致は確認できません。

割り当てられた暦の日付と、日時の許容差は別に検証します。1分未満の違いなら、丸めた表示では許容できても、現象が午前0時の反対側に入ってしまう場合があります。すべての日付について許容差を広げるのではなく、その境界について分かっている不確かさを記録してください。

同じ基準日付に新月と中気がある例を含めます。中気の瞬間が合より前であっても、中気は新しい暦月に属します。現象の時刻の前後関係だけに基づくテストでは、この違いを見落とすことがあります。

閏月の番号については、2033–2034年の並びを含めてください。2033年の通常の8月と2034年1月には中気がなく、その間の閏月は11月です。中気を含まない月をすべて閏月とする計算は、これらの検証に合格しません。

暦注と歴史上の日付の検証

暦注の分類

は適した行い、は避ける行いを意味します。新月や旧暦の日付が一致しても、これらの一覧の妥当性は確認できません。採用した暦書の取り決めやデータセットに照らして参照規則を検証し、行いの英語表記も別に確認してください。明示的な「なし」という結果は、データの欠落とも区別できる必要があります。

節気で暦注の分類が変わる場合、その境界が節気の暦日の始まりなのか、節気の厳密な瞬間なのかを記録します。選んだ境界の前後を検証してください。これらの月に関する分類は、旧暦の月の始まりに変わるとは限りません。

十干と十二支による干支の周期でも、年の境界を明示する必要があります。春節に基づく年の表示と、立春(Lichun)に基づく年の表示は、両者の境界の間で異なることがあります。各項目を、それぞれに明示された取り決めで比較してください。

歴史上の日付の換算

歴史文書では、換算方法を選ぶ前に、王朝や年号の年、地域、月の表記、閏の表示、記録されている干支日を確認します。過去の暦は、異なる天文学的手法や時刻基準を使っていました。そのため、現代の計算を過去へ延長した結果は、その記録で実際に使われた暦と異なる場合があります。

書き写した原文、その解釈、換算後の日付は、別の項目として保存してください。文書に数字の日付と干支日の両方がある場合は、一方を捨てて他方に合わせるのではなく、両者が一致するかを検証します。

西暦1–2100年

プライバシーポリシー