Cara memvalidasi perhitungan kalender Tionghoa

Tanggal acuan

Validasi konversi tanggal lunar, waktu penanda musim, klasifikasi almanak, dan perilaku antarmuka secara terpisah. Kecocokan pada satu bagian tidak membuktikan bahwa bagian lain benar. Serangkaian pemeriksaan yang berguna mencakup batas bulan dan tahun, selain tanggal-tanggal di dalam bulan.

Pilih acuan independen yang menyatakan konvensi kalender dan cakupannya. Situs web kedua yang menggunakan mesin perhitungan yang sama dapat menghasilkan kesalahan yang sama. Catat edisi atau versi acuan bersama nilai yang diharapkan agar perubahan di kemudian hari dapat ditelusuri.

Atlas mendukung tanggal sipil dari 1 hingga 2100 Masehi. Versi mesin perhitungannya yang telah ditetapkan menggunakan tanggal sipil Julian hingga 1582-10-04, lalu dilanjutkan dengan Gregorian 1582-10-15. Tanggal 5 Oktober hingga 14 Oktober tidak terdapat dalam urutan tanggal sipil tersebut. Perbandingan yang menggunakan kalender Gregorian yang diperluas mundur sebelum diperkenalkan, yang disebut kalender Gregorian proleptik, menguji pemetaan yang berbeda untuk tanggal-tanggal awal.

Konvensi ini menggambarkan label tanggal sipil perangkat lunak. Konvensi tersebut tidak menetapkan kalender yang secara historis digunakan di Tiongkok. Uji batas awal dan akhir yang didukung serta penanganan tanggal di luarnya. Rentang tanggal sipil juga berbeda dari rentang tahun lunar lengkap, yang batas-batasnya jatuh pada hari berbeda.

Simpan setiap hasil sebagai tanggal sipil dan konvensi kalender, tahun lunar, nomor bulan lunar, penanda kabisat, serta hari lunar yang lengkap. Bedakan nomor bulan dari posisinya dalam tahun: bulan keenam kabisat adalah bulan ketujuh secara kronologis, tetapi nomor bulannya tetap enam.

Kasus uji

Pemeriksaan tanggal yang persis

Tanggal-tanggal ini mencakup Tahun Baru Imlek, hari kabisat Gregorian yang sah, serta kedua ujung bulan lunar biasa dan kabisat. Dalam tabel ini, label tahun lunar adalah tahun Gregorian ketika tahun lunar tersebut dimulai. “Biasa” berarti penanda kabisat bernilai false.

Tanggal GregorianTahun lunarBulanJenisHari lunar
2024-02-09202312Biasa30
2024-02-1020241Biasa1
2024-02-2920241Biasa20
2025-07-2420256Biasa30
2025-07-2520256Kabisat1
2025-08-2220256Kabisat29
2025-08-2320257Biasa1
2033-12-21203311Biasa30
2033-12-22203311Kabisat1
2034-01-19203311Kabisat29
2034-01-20203312Biasa1
2034-02-1920341Biasa1

Jalankan setiap tanggal dalam kedua arah. Konversi Gregorian ke lunar seharusnya menghasilkan keempat unsur tanggal lunar, dan konversi lunar ke Gregorian seharusnya mengembalikan tanggal yang dinyatakan. Lalu uji seluruh urutan di sekitar batas, bukan hanya hari pertamanya. Cara ini membedakan awal bulan yang keliru dari label tampilan yang menghilangkan penanda kabisat.

Konversi bolak-balik saja tidak dapat membuktikan keakuratan. Dua fungsi dapat menggunakan tabel salah yang sama dan tetap saling membalikkan hasil dengan sempurna. Perbandingan terhadap nilai yang diharapkan dari acuan independen merupakan pemeriksaan tersendiri. Perbandingan menyeluruh perlu mencatat jumlah tanggal yang dibandingkan, acuan yang digunakan, dan setiap ketidakcocokan.

Pemeriksaan struktur dan masukan

PemeriksaanPerilaku yang diharapkan
Maju dari hari terakhir bulan lunarHari pertama bulan berikutnya secara kronologis, dengan nomor bulan, penanda kabisat, dan tahun lunar yang benar
Maju dari bulan biasa ke bulan kabisatnyaUlangi nomor bulan dan ubah penanda kabisat menjadi true
Maju dari bulan kabisat ke bulan berikutnyaHapus penanda kabisat dan majukan nomor bulan, termasuk pergantian tahun jika diperlukan
Meminta hari 30 pada bulan keenam kabisat 2025 yang memiliki 29 hariTolak tanggal lunar yang tidak ada
Meminta bulan kabisat pada tahun ketika bulan kabisat tersebut tidak terjadiTolak, bukan menggantinya dengan bulan biasa
Memasukkan 29 Februari 2000, lalu 29 Februari 2100Terima tanggal Gregorian pertama dan tolak yang kedua
Memasukkan 29 Februari 1500 menurut konvensi Julian AtlasTerima sebagai tanggal Julian yang sah
Maju satu hari sipil dari 1582-10-04 menurut konvensi peralihan AtlasSampai pada 1582-10-15, tepat satu hari kemudian
Mengonversikan tanggal sah ke lunar lalu kembaliKembalikan tanggal asli tanpa kehilangan identitas bulan kabisat

Kalender Julian menambahkan hari kabisat setiap tahun keempat. Aturan Gregorian mengecualikan tahun abad kecuali habis dibagi 400, sehingga pengujian hari kabisat harus menyebutkan kalender sipil yang digunakan.

Pemeriksaan penolakan menggambarkan antarmuka masukan tanggal yang ketat. Pustaka yang mendasarinya mungkin juga menawarkan normalisasi yang terdokumentasi, misalnya menggulirkan hari di luar rentang ke bulan berikutnya. Uji perilaku-perilaku ini secara terpisah, alih-alih mengira nilai yang telah dinormalisasi sebagai masukan asli.

Pemeriksaan antarmuka

Uji pergantian bahasa, pemuatan ulang peramban, navigasi bulan, dan entri Almanak secara terpisah dari fungsi konversi. Pergantian bahasa seharusnya mempertahankan tanggal yang dipilih dan bulan yang ditampilkan. Menelusuri bulan lain seharusnya mempertahankan hari yang dipilih sampai hari baru dipilih. Periksa bahwa entri Almanak membuka tanggal Gregorian setempat pada perangkat dan bahwa halaman tanggal permanen mempertahankan tanggal sipil yang tertulis ketika dibuka di zona waktu lain.

Sertakan saat pengujian ketika tanggal setempat perangkat berbeda dari tanggal acuan kalender. Ini dapat mendeteksi kesalahan penggunaan jam acuan astronomi untuk memilih tanggal Almanak, atau penggunaan jam peramban untuk merekonstruksi batas bulan lunar.

Penanda musim dan batas

Perbandingan penanda musim memerlukan identitas penanda, tanggal sipil, waktu, standar waktu, dan tingkat ketelitian yang dipublikasikan. Tempatkan kedua nilai dalam kalender sipil dan standar waktu yang sama sebelum membandingkannya. Waktu yang dipublikasikan hingga menit tidak dapat membuktikan kecocokan hingga detik.

Uji tanggal kalender yang ditetapkan secara terpisah dari toleransi waktu. Selisih kurang dari satu menit mungkin dapat diterima untuk tampilan yang dibulatkan, tetapi tetap dapat menempatkan peristiwa pada sisi tengah malam yang salah. Dokumentasikan ketidakpastian yang diketahui untuk batas tertentu itu, bukan memperlebar toleransi untuk semua tanggal.

Sertakan bulan baru dan penanda musim utama yang terjadi pada tanggal acuan yang sama. Penanda tersebut menjadi bagian dari bulan kalender yang baru meskipun saat terjadinya mendahului konjungsi. Pengujian yang hanya didasarkan pada urutan waktu peristiwa dapat melewatkan perbedaan ini.

Untuk penomoran bulan kabisat, sertakan urutan 2033–2034. Bulan kedelapan biasa tahun 2033 dan bulan pertama tahun 2034 tidak memiliki penanda musim utama, sedangkan bulan kabisat di antaranya adalah bulan kesebelas. Perhitungan yang menganggap setiap bulan tanpa penanda musim utama sebagai kabisat akan gagal dalam pemeriksaan ini.

Pemeriksaan almanak dan sejarah

Klasifikasi almanak

Yi berarti kegiatan yang sesuai dan Ji berarti kegiatan yang perlu dihindari. Kecocokan bulan baru atau tanggal lunar tidak memvalidasi daftar-daftar ini. Uji aturan pencariannya terhadap konvensi almanak atau himpunan data yang dipilih, lalu periksa label kegiatan berbahasa Inggris secara terpisah. Hasil “tidak ada” yang dinyatakan secara eksplisit juga harus tetap dapat dibedakan dari data yang hilang.

Apabila klasifikasi almanak berubah pada penanda musim, catat apakah batasnya adalah awal hari kalender penanda tersebut atau saat persis terjadinya. Uji kedua sisi batas yang dipilih. Klasifikasi bulan ini tidak harus berubah pada awal bulan lunar.

Ganzhi, siklus batang dan cabang, juga memerlukan batas tahun yang dinyatakan. Label tahun berdasarkan Tahun Baru Imlek dan label berdasarkan Awal Musim Semi, atau Lichun, dapat berbeda selama selang di antara kedua batas tersebut. Bandingkan setiap unsur dengan menggunakan konvensi yang dinyatakan untuknya.

Konversi historis

Untuk dokumen sejarah, tentukan tahun dinasti atau eranya, tempat, penamaan bulan, label kabisat, dan hari Ganzhi yang dicatat sebelum memilih metode konversi. Kalender terdahulu menggunakan metode astronomi dan konvensi waktu yang berbeda. Karena itu, perhitungan modern yang diperluas ke masa lalu dapat berbeda dari kalender yang benar-benar digunakan dalam catatan tersebut.

Simpan transkripsi, penafsirannya, dan tanggal hasil konversi sebagai unsur yang terpisah. Apabila dokumen memberikan tanggal bernomor sekaligus hari Ganzhi, uji kecocokannya, bukan membuang salah satunya agar yang lain terlihat sesuai.

1–2100 Masehi

Kebijakan Privasi