วิธีตรวจสอบความถูกต้องของการคำนวณปฏิทินจีน
วันที่อ้างอิง
ตรวจสอบการแปลงวันที่จันทรคติ เวลาสารทฤดู การจัดประเภทในปฏิทินฤกษ์จีน และการทำงานของส่วนติดต่อผู้ใช้แยกกัน ความตรงกันในส่วนหนึ่งไม่ได้ยืนยันว่าส่วนอื่นถูกต้อง ชุดการตรวจสอบที่มีประโยชน์ควรมีทั้งขอบเขตเดือน ขอบเขตปี และวันที่ภายในเดือน
เลือกแหล่งอ้างอิงอิสระที่ระบุข้อตกลงปฏิทินและขอบเขตครอบคลุม เว็บไซต์อีกแห่งที่ใช้กลไกคำนวณเดียวกันอาจให้ข้อผิดพลาดซ้ำกัน บันทึกฉบับหรือรุ่นของแหล่งอ้างอิงไว้กับค่าที่คาดหมาย เพื่อให้ติดตามการเปลี่ยนแปลงภายหลังได้
Atlas รองรับวันที่พลเรือนตั้งแต่ ค.ศ. 1 ถึง 2100 กลไกคำนวณที่ตรึงรุ่นไว้ใช้ วันที่พลเรือนแบบจูเลียนถึง 1582-10-04 แล้วตามด้วยเกรกอรี 1582-10-15 วันที่ 5 ตุลาคมถึง 14 ตุลาคมไม่ปรากฏในลำดับวันที่พลเรือนนี้ การเปรียบเทียบกับการขยายปฏิทินเกรกอรีย้อนกลับไปก่อนเริ่มใช้จริง ซึ่งเรียกว่า ปฏิทินเกรกอรีแบบย้อนหลัง เป็นการทดสอบการจับคู่วันที่ยุคต้นอีกแบบหนึ่ง
ข้อตกลงนี้อธิบายตัวระบุวันที่พลเรือนของซอฟต์แวร์ ไม่ได้ยืนยันว่าในประวัติศาสตร์จีนใช้ปฏิทินใด ให้ทดสอบวันแรกและวันสุดท้ายที่รองรับ รวมทั้งวิธีจัดการวันที่นอกขอบเขต ช่วงวันที่พลเรือนยังต่างจากช่วงปีจันทรคติเต็มปี ซึ่งมีขอบเขตตรงกับคนละวัน
เก็บแต่ละผลลัพธ์ให้ครบทั้ง วันที่พลเรือนและข้อตกลงปฏิทิน ปีจันทรคติ หมายเลขเดือนจันทรคติ ค่าสถานะอธิกมาส และวันจันทรคติ แยกหมายเลขเดือนออกจากลำดับที่ของเดือนในปี เดือนอธิกมาสที่หกเป็นเดือนลำดับที่เจ็ดตามเวลา แต่หมายเลขเดือนยังเป็นหก
กรณีทดสอบ
การตรวจวันที่ด้วยผลคาดหมายที่แน่นอน
วันที่เหล่านี้ครอบคลุมตรุษจีน วันเพิ่มในปีอธิกสุรทินเกรกอรีที่มีอยู่จริง และปลายทั้งสองด้านของเดือนจันทรคติปกติกับเดือนอธิกมาส ในตารางนี้ เลขกำกับปีจันทรคติคือปีเกรกอรีที่ปีจันทรคตินั้นเริ่ม “ปกติ” หมายถึงค่าสถานะอธิกมาสเป็น false
| วันที่เกรกอรี | ปีจันทรคติ | เดือน | ชนิด | วันจันทรคติ |
|---|---|---|---|---|
| 2024-02-09 | 2023 | 12 | ปกติ | 30 |
| 2024-02-10 | 2024 | 1 | ปกติ | 1 |
| 2024-02-29 | 2024 | 1 | ปกติ | 20 |
| 2025-07-24 | 2025 | 6 | ปกติ | 30 |
| 2025-07-25 | 2025 | 6 | อธิกมาส | 1 |
| 2025-08-22 | 2025 | 6 | อธิกมาส | 29 |
| 2025-08-23 | 2025 | 7 | ปกติ | 1 |
| 2033-12-21 | 2033 | 11 | ปกติ | 30 |
| 2033-12-22 | 2033 | 11 | อธิกมาส | 1 |
| 2034-01-19 | 2033 | 11 | อธิกมาส | 29 |
| 2034-01-20 | 2033 | 12 | ปกติ | 1 |
| 2034-02-19 | 2034 | 1 | ปกติ | 1 |
ทดสอบแต่ละวันทั้งสองทิศทาง การแปลงเกรกอรีเป็นจันทรคติควรให้ค่าจันทรคติครบทั้งสี่ช่อง และการแปลงจันทรคติเป็นเกรกอรีควรได้วันที่ที่ระบุคืนมา จากนั้นทดสอบลำดับวันทั้งหมดรอบจุดเปลี่ยน ไม่ใช่เพียงวันแรก วิธีนี้ช่วยแยกข้อผิดพลาดของวันเริ่มเดือนออกจากป้ายแสดงผลที่ทำค่าสถานะอธิกมาสหาย
การแปลงไปแล้วกลับเพียงอย่างเดียวไม่อาจยืนยันความถูกต้องได้ ฟังก์ชันสองตัวอาจใช้ตารางผิดชุดเดียวกัน แต่ยังย้อนการทำงานของกันและกันได้พอดี การเปรียบเทียบกับค่าคาดหมายจากแหล่งอิสระเป็นอีกการตรวจสอบหนึ่ง การเปรียบเทียบอย่างครอบคลุมควรบันทึกจำนวนวันที่เปรียบเทียบ แหล่งอ้างอิงที่ใช้ และทุกจุดที่ไม่ตรงกัน
การตรวจโครงสร้างและข้อมูลนำเข้า
| การตรวจสอบ | การทำงานที่คาดหมาย |
|---|---|
| เลื่อนจากวันสุดท้ายของเดือนจันทรคติไปวันถัดไป | ได้วันที่หนึ่งของเดือนถัดไปตามลำดับเวลา พร้อมหมายเลขเดือน ค่าสถานะอธิกมาส และปีจันทรคติที่ถูกต้อง |
| เลื่อนจากเดือนปกติเข้าสู่เดือนอธิกมาสที่ตามมา | ใช้หมายเลขเดือนเดิมและเปลี่ยนค่าสถานะอธิกมาสเป็น true |
| เลื่อนจากเดือนอธิกมาสเข้าสู่เดือนถัดไป | ล้างค่าสถานะอธิกมาสและเลื่อนหมายเลขเดือน รวมการเปลี่ยนปีหากจำเป็น |
| ขอวันที่ 30 ของเดือนอธิกมาสที่หกใน ค.ศ. 2025 ซึ่งมี 29 วัน | ปฏิเสธวันที่จันทรคติที่ไม่มีอยู่ |
| ขอเดือนอธิกมาสในปีที่ไม่มีเดือนอธิกมาสนั้น | ปฏิเสธแทนการนำเดือนปกติมาใช้แทน |
| ป้อนวันที่ 29 กุมภาพันธ์ ค.ศ. 2000 แล้วป้อนวันที่ 29 กุมภาพันธ์ ค.ศ. 2100 | ยอมรับวันที่เกรกอรีแรกและปฏิเสธวันที่ที่สอง |
| ป้อนวันที่ 29 กุมภาพันธ์ ค.ศ. 1500 ภายใต้ข้อตกลงจูเลียนของ Atlas | ยอมรับว่าเป็นวันที่จูเลียนที่มีอยู่จริง |
| เลื่อนไปหนึ่งวันพลเรือนจาก 1582-10-04 ภายใต้ข้อตกลงการเปลี่ยนปฏิทินของ Atlas | ได้ 1582-10-15 หลังเวลาผ่านไปหนึ่งวันพอดี |
| แปลงวันที่ที่มีอยู่จริงเป็นจันทรคติแล้วแปลงกลับ | ได้วันที่เดิมคืนมาโดยไม่สูญเสียการระบุว่าเป็นเดือนอธิกมาส |
ปฏิทินจูเลียนเพิ่มหนึ่งวันทุกปีที่สี่ เกณฑ์เกรกอรีไม่นับปีที่ลงท้ายศตวรรษเป็นปีเพิ่มวัน เว้นแต่หารด้วย 400 ลงตัว ด้วยเหตุนี้ การทดสอบวันเพิ่มจึงต้องระบุปฏิทินพลเรือนที่ใช้
การทดสอบการปฏิเสธข้างต้นอธิบายส่วนรับวันที่ที่ตรวจข้อมูลอย่างเคร่งครัด ไลบรารีเบื้องหลังอาจมีการปรับค่าให้อยู่ในรูปที่ยอมรับได้ตามที่เอกสารระบุ เช่น เลื่อนเลขวันที่เกินขอบเขตไปยังเดือนถัดไป ให้ทดสอบพฤติกรรมเหล่านี้แยกกัน แทนที่จะเข้าใจว่าค่าที่ปรับแล้วคือข้อมูลเดิมที่ป้อน
การตรวจส่วนติดต่อผู้ใช้
ทดสอบการเปลี่ยนภาษา การรีเฟรชเบราว์เซอร์ การเลื่อนดูเดือน และรายการปฏิทินฤกษ์จีนแยกจากฟังก์ชันแปลงวันที่ การเปลี่ยนภาษาควรรักษาวันที่เลือกและเดือนที่แสดงไว้ การเปิดดูเดือนอื่นควรรักษาวันที่เลือกจนกว่าจะเลือกวันใหม่ ตรวจว่ารายการปฏิทินฤกษ์จีนเปิดวันที่เกรกอรีตามเวลาท้องถิ่นของอุปกรณ์ และหน้าวันที่ถาวรยังคงวันที่พลเรือนที่เขียนไว้แม้อยู่ในเขตเวลาอื่น
รวมขณะทดสอบที่วันที่ท้องถิ่นของอุปกรณ์ต่างจากวันที่อ้างอิงของปฏิทินด้วย วิธีนี้ตรวจจับข้อผิดพลาดที่นำเวลานาฬิกาอ้างอิงทางดาราศาสตร์มาเลือกวันที่ของรายการปฏิทินฤกษ์จีน หรือนำนาฬิกาเบราว์เซอร์มาสร้างขอบเขตเดือนจันทรคติใหม่
สารทฤดูและจุดเปลี่ยน
การเปรียบเทียบสารทฤดูต้องมี ตัวระบุสารท วันที่พลเรือน เวลา มาตรฐานเวลา และระดับความละเอียดที่เผยแพร่ ทำให้ค่าทั้งสองอยู่ในปฏิทินพลเรือนและมาตรฐานเวลาเดียวกันก่อนเปรียบเทียบ เวลาที่เผยแพร่ละเอียดถึงนาทีไม่อาจยืนยันความตรงกันถึงวินาที
ทดสอบวันที่ปฏิทินที่กำหนดแยกจากค่าความคลาดเคลื่อนที่ยอมรับได้ของวันและเวลา ความต่างน้อยกว่าหนึ่งนาทีอาจยอมรับได้สำหรับการแสดงผลที่ปัดเศษ แต่ทำให้เหตุการณ์อยู่ผิดฝั่งเที่ยงคืนได้ บันทึกความไม่แน่นอนที่ทราบสำหรับขอบเขตนั้นโดยเฉพาะ แทนการขยายค่าความคลาดเคลื่อนที่ยอมรับได้สำหรับทุกวัน
รวมกรณีจันทร์ดับกับสารทหลักเกิดในวันที่อ้างอิงเดียวกันด้วย สารทถือว่าอยู่ในเดือนปฏิทินใหม่ แม้จะเกิดก่อนขณะร่วมทิศ การทดสอบที่ดูเพียงลำดับเวลาของเหตุการณ์อาจมองข้ามความแตกต่างนี้
ในการกำหนดหมายเลขเดือนอธิกมาส ให้รวม ลำดับ ค.ศ. 2033–2034 เดือนที่แปดปกติของ ค.ศ. 2033 และเดือนที่หนึ่งของ ค.ศ. 2034 ไม่มีสารทหลัก ขณะที่เดือนอธิกมาสระหว่างนั้นคือเดือนที่สิบเอ็ด การคำนวณที่ถือว่าทุกเดือนที่ไม่มีสารทหลักเป็นเดือนอธิกมาสจะไม่ผ่านการตรวจเหล่านี้
การตรวจปฏิทินฤกษ์จีนและวันที่ประวัติศาสตร์
การจัดประเภทในปฏิทินฤกษ์จีน
อี๋ หมายถึงกิจกรรมที่เหมาะสม และ จี้ หมายถึงกิจกรรมที่ควรหลีกเลี่ยง การได้จันทร์ดับหรือวันที่จันทรคติตรงกันไม่ได้ตรวจยืนยันรายการเหล่านี้ ให้ทดสอบเกณฑ์ค้นค่ากับข้อตกลงหรือชุดข้อมูลปฏิทินฤกษ์จีนที่เลือก แล้วตรวจป้ายชื่อกิจกรรมภาษาอังกฤษแยกต่างหาก ผลที่ระบุชัดว่า “ไม่มี” ยังต้องแยกจากข้อมูลที่ขาดหายได้ด้วย
หากการจัดประเภทในปฏิทินฤกษ์จีนเปลี่ยนที่สารทฤดู ให้บันทึกว่าขอบเขตคือเวลาเริ่มวันปฏิทินของสารทนั้นหรือขณะที่สารทเกิดขึ้นแน่นอน ทดสอบทั้งสองฝั่งของขอบเขตที่เลือก การจัดประเภทเดือนเหล่านี้ไม่จำเป็นต้องเปลี่ยนที่ต้นเดือนจันทรคติ
กานจือ หรือวัฏจักรต้นฟ้า–กิ่งดินก็ต้องระบุขอบเขตปีเช่นกัน ชื่อปีที่ยึดตรุษจีนกับชื่อปีที่ยึดเริ่มฤดูใบไม้ผลิหรือลี่ชุนอาจต่างกันในช่วงระหว่างจุดเปลี่ยนทั้งสอง ให้เปรียบเทียบแต่ละช่องตามข้อตกลงที่ช่องนั้นระบุ
การแปลงวันที่ประวัติศาสตร์
สำหรับเอกสารประวัติศาสตร์ ให้ระบุราชวงศ์หรือปีศักราช ท้องถิ่น ชื่อหรือหมายเลขเดือน คำกำกับอธิกมาส และชื่อวันกานจือที่บันทึกไว้ ก่อนเลือกวิธีแปลง ปฏิทินเก่าใช้วิธีทางดาราศาสตร์และข้อตกลงเรื่องเวลาต่างกัน การนำวิธีคำนวณสมัยใหม่ย้อนกลับไปใช้จึงอาจต่างจากปฏิทินที่ใช้จริงในบันทึก
เก็บข้อความถอด การตีความ และวันที่แปลงแล้วไว้คนละช่อง หากเอกสารให้ทั้งวันที่เป็นตัวเลขและชื่อวันกานจือ ให้ตรวจว่าตรงกันหรือไม่ แทนการทิ้งอย่างหนึ่งเพื่อให้อีกอย่างดูสอดคล้อง