Kiến Thức

Cách Tính Âm Lịch Chính Xác: Ngày Sóc, Trung Khí Và Tháng Nhuận

Thầy Vũ Giới — Phong Thuỷ Liên Hoa

Minh hoạ Cách Tính Âm Lịch Chính Xác: Ngày Sóc, Trung Khí Và Tháng Nhuận

Đặt lại bài toán: tính âm lịch là tính hai thời điểm

Nghe thì phức tạp, nhưng toàn bộ việc dựng một cuốn âm lịch chỉ quy về hai phép tính thiên văn, lặp đi lặp lại.

Phép thứ nhất: tìm thời điểm sóc, tức lúc hiệu kinh độ hoàng đạo của mặt trăng và mặt trời bằng không. Kết quả cho ta ngày mùng Một của từng tháng, và do đó cho ta độ dài mọi tháng âm.

Phép thứ hai: tìm thời điểm trung khí, tức lúc kinh độ hoàng đạo của mặt trời đi qua các bội số của ba mươi độ. Kết quả cho ta biết tháng nào chứa trung khí nào, từ đó suy ra tên tháng và vị trí tháng nhuận.

Có hai chuỗi thời điểm ấy là có toàn bộ cuốn lịch. Mọi thứ còn lại — can chi, ngày rằm, tháng đủ tháng thiếu — chỉ là phép đếm. Vấn đề duy nhất là phải tính đủ chính xác, bởi khi một thời điểm rơi sát nửa đêm, sai một phút là lệch trọn một ngày, và lệch một ngày ở mốc Đông Chí có thể làm lệch cả tháng nhuận của cả năm.

Số ngày Julius — thước đo thời gian liên tục

Bước đầu tiên của mọi thuật toán lịch là bỏ hẳn khái niệm năm–tháng–ngày mà chuyển sang một trục số liên tục: số ngày Julius (Julian Day, viết tắt JD), đếm số ngày trôi qua kể từ trưa ngày 1 tháng Giêng năm 4713 trước Công nguyên theo lịch Julius. Nhờ đó phép cộng trừ thời gian trở thành phép cộng trừ số thực, không phải lo tháng đủ tháng thiếu hay năm nhuận.

Chuyển từ ngày dương lịch sang JD, với năm Y, tháng M, ngày D theo lịch Gregory:

Nếu M ≤ 2 thì Y = Y − 1 và M = M + 12.
A = ⌊Y / 100⌋, B = 2 − A + ⌊A / 4⌋
JD = ⌊365,25 × (Y + 4716)⌋ + ⌊30,6001 × (M + 1)⌋ + D + B − 1524,5

Số 0,5 ở cuối là vì ngày Julius bắt đầu lúc trưa chứ không phải nửa đêm. Trong thực hành lịch Việt, tiện nhất là làm việc với JD dạng số thực theo giờ quốc tế, rồi chỉ cộng 7/24 vào bước cuối cùng khi cần đổi sang giờ Việt Nam.

Từ JD ta cũng có ngay can chi ngày, vì chuỗi can chi chạy liên tục: với n = ⌊JD + 0,5⌋, can ngày là phần tử thứ (n + 9) mod 10 của bảng mười thiên can, chi ngày là phần tử thứ (n + 1) mod 12 của bảng mười hai địa chi. Đây là công thức nên kiểm lại bằng một ngày đã biết trước khi tin dùng.

Tính kinh độ mặt trời

Đặt T là số thế kỷ Julius kể từ kỷ nguyên J2000,0:

T = (JD − 2451545,0) / 36525

Kinh độ trung bình của mặt trời và dị thường trung bình:

L₀ = 280,46646 + 36000,76983·T + 0,0003032·T² (độ)
M = 357,52911 + 35999,05029·T − 0,0001537·T² (độ)

Phương trình tâm sai — hiệu chỉnh do quỹ đạo hình elip:

C = (1,914602 − 0,004817·T − 0,000014·T²)·sin M + (0,019993 − 0,000101·T)·sin 2M + 0,000289·sin 3M

Kinh độ hoàng đạo thực của mặt trời là λ = L₀ + C, rút về khoảng 0–360 độ. Độ chính xác của công thức này vào cỡ vài giây cung, tương đương sai số thời gian dưới một phút — hoàn toàn đủ cho việc làm lịch, trừ vài trường hợp cực hiếm khi tiết khí rơi đúng vào giây chuyển ngày.

Muốn tìm thời điểm một tiết khí, ta giải phương trình λ(JD) = k × 15° với k từ 0 tới 23. Cách làm gọn nhất là dùng phép lặp chia đôi hoặc Newton: ước lượng ngày gần đúng bằng cách chia đều năm, tính λ, so với đích, rồi dịch JD một lượng bằng sai lệch góc chia cho tốc độ biểu kiến khoảng 0,9856 độ mỗi ngày. Lặp ba bốn vòng là hội tụ tới dưới một giây.

Với trung khí, ta chỉ cần các k chẵn: Đông Chí ứng λ = 270°, Vũ Thuỷ ứng 330°, Xuân Phân ứng 0°, Cốc Vũ ứng 30°, cứ thế cách nhau ba mươi độ.

Tính thời điểm sóc

Phép tính điểm sóc dùng công thức của Jean Meeus trong Astronomical Algorithms, xuất phát từ số thứ tự tuần trăng k tính từ điểm sóc ngày 6 tháng Giêng năm 2000. Ước lượng thô:

k ≈ (năm dương dạng thập phân − 2000) × 12,3685, lấy phần nguyên.

Thời điểm sóc trung bình:

T = k / 1236,85
JDE = 2451550,09766 + 29,530588861·k + 0,00015437·T² − 0,000000150·T³ + 0,00000000073·T⁴

Sau đó cộng các số hạng nhiễu loạn theo dị thường mặt trời M, dị thường mặt trăng M′ và độ vĩ F:

M = 2,5534 + 29,10535670·k − 0,0000014·T²
M′ = 201,5643 + 385,81693528·k + 0,0107582·T²
F = 160,7108 + 390,67050284·k − 0,0016118·T²

Hiệu chỉnh chính (đơn vị ngày), lấy các số hạng lớn nhất:

ΔJD = −0,40720·sin M′ + 0,17241·E·sin M + 0,01608·sin 2M′ + 0,01039·sin 2F + 0,00739·E·sin(M′ − M) − 0,00514·E·sin(M′ + M) + 0,00208·E²·sin 2M − 0,00111·sin(M′ − 2F) − …

với E = 1 − 0,002516·T − 0,0000074·T². Giữ khoảng mười bốn số hạng đầu là đạt sai số dưới nửa phút — dư sức cho lịch pháp. Kết quả là thời điểm sóc thực tính theo thời gian động lực; muốn ra giờ quốc tế phải trừ đi ΔT, độ chênh giữa thời gian động lực và giờ thế giới, hiện vào khoảng 70 giây và biến thiên theo thời đại. Với lịch quá khứ xa, bỏ qua ΔT có thể gây lệch ngày, nên các bộ lịch nghiêm túc đều nội suy ΔT theo bảng của NASA.

Ráp lại thành cuốn lịch: thuật toán đầy đủ

Với một năm dương lịch Y bất kỳ, quy trình dựng lịch âm Việt Nam như sau.

Bước 1. Tính thời điểm Đông Chí của năm Y − 1 và năm Y, đổi sang giờ Việt Nam bằng cách cộng 7 giờ, rồi lấy phần ngày.

Bước 2. Tìm ngày sóc gần nhất trước hoặc đúng bằng mỗi Đông Chí ấy. Hai ngày sóc thu được chính là mùng Một của hai tháng Mười Một liên tiếp — hai cột mốc neo năm âm.

Bước 3. Đếm số tháng giữa hai mốc. Nếu là mười hai thì năm ấy thường; nếu là mười ba thì năm ấy nhuận.

Bước 4. Khi năm nhuận, duyệt lần lượt từng tháng kể từ tháng Mười Một, kiểm tra tháng nào không chứa trung khí nào. Tháng đầu tiên thoả điều kiện là tháng nhuận, mang tên tháng liền trước nó.

Bước 5. Đánh số tháng: tháng Mười Một là mốc, đếm tiếp thành Mười Hai, Giêng, Hai… bỏ qua tháng nhuận khi đánh số.

Bước 6. Với mỗi tháng, độ dài bằng hiệu hai ngày sóc liên tiếp, ra 29 hoặc 30 ngày.

Bước 7. Gán can chi. Can chi ngày suy từ JD. Can chi năm đổi tại Lập Xuân; can chi tháng đổi tại mười hai tiết khí lẻ; can tháng suy từ can năm theo phép ngũ hổ độn: năm Giáp Kỷ khởi tháng Giêng là Bính Dần, năm Ất Canh khởi Mậu Dần, năm Bính Tân khởi Canh Dần, năm Đinh Nhâm khởi Nhâm Dần, năm Mậu Quý khởi Giáp Dần.

Múi giờ: nơi lịch Việt và lịch Trung tách nhau

Toàn bộ thuật toán trên chỉ khác nhau ở một tham số duy nhất giữa lịch Việt Nam và lịch Trung Quốc: múi giờ dùng để cắt ngày. Việt Nam dùng UTC+7, Trung Quốc dùng UTC+8. Khi thời điểm sóc hoặc thời điểm trung khí rơi vào khoảng từ 23 giờ tới 24 giờ giờ Việt Nam, thì cùng thời khắc ấy đã sang ngày hôm sau theo giờ Bắc Kinh. Hệ quả dây chuyền: ngày mùng Một lệch một ngày, có khi tháng nhuận rơi vào vị trí khác, và Tết lệch hẳn một ngày như đã xảy ra năm 1985 và năm 2007.

Vì vậy khi lập lá số cho người sinh trước năm 1968, phải hỏi rõ nơi sinh và tra lịch đúng của vùng ấy. Miền Bắc trước 1968 tính theo UTC+8; miền Nam giai đoạn 1960–1975 cũng dùng giờ chuẩn UTC+8. Ngoài ra còn giai đoạn Nhật chiếm đóng 1943–1945 dùng UTC+9. Đây là những cái bẫy có thật, không phải chuyện lý thuyết.

Kiểm chứng: bốn phép thử một cuốn lịch

Sau khi lập trình xong, đừng vội tin. Bốn phép kiểm sau bắt được gần như mọi lỗi.

Kiểm tra tuần trăng. Đối chiếu ngày rằm với bảng trăng tròn của các cơ quan thiên văn. Rằm phải rơi vào ngày 15 hoặc 16 âm; nếu ra 14 hoặc 17 là thuật toán sóc sai.

Kiểm tra nhật thực. Mọi nhật thực trong lịch sử đều phải rơi đúng ngày mùng Một, mọi nguyệt thực phải rơi vào rằm. Đây là phép thử khắt khe nhất và cũng là phép mà các nhà làm lịch cổ dùng để bắt lỗi lẫn nhau.

Kiểm tra chu kỳ nhuận. Trong mọi khoảng mười chín năm liên tiếp phải có đúng bảy năm nhuận. Nếu ra sáu hoặc tám, chắc chắn quy tắc trung khí bị cài sai.

Kiểm tra can chi ngày. Chọn vài ngày lịch sử đã biết can chi chắc chắn, ví dụ ngày 1 tháng Giêng năm 2000 dương lịch là ngày Mậu Ngọ, đối chiếu với kết quả chương trình.

Ngoài ra nên kiểm biên: chạy thử liên tục vài trăm năm, in ra độ dài từng năm âm và cảnh báo mọi năm không nằm trong khoảng 353–355 ngày hoặc 383–385 ngày. Một năm ra 352 hay 386 ngày là dấu hiệu chắc chắn có lỗi ở khâu xác định mốc tháng Mười Một.

Từ thuật toán trở lại với nghề

Người làm phong thuỷ không nhất thiết phải tự viết chương trình lịch, nhưng cần hiểu bên trong nó có gì. Bởi khi hai cuốn lịch bất đồng — và điều này xảy ra vài lần mỗi thế kỷ — người hiểu thuật toán sẽ biết truy nguyên: hai bản lịch dùng múi giờ nào, thời điểm trung khí rơi vào lúc mấy giờ mấy phút, tháng nào là tháng đầu tiên khuyết trung khí. Trả lời được ba câu ấy là phân định được đúng sai, thay vì chọn theo cuốn lịch nào bán chạy hơn.

Đó cũng chính là tinh thần quan tượng thụ thời của cổ nhân: lịch không phải là quy ước tuỳ tiện mà là bản ghi trung thực của chuyển động trời đất. Khi dùng lịch để định ngày động thổ, để lập trụ mệnh, để tính vận khí, ta đang mượn lại độ chính xác ấy. Sai một phút trong tính toán không chỉ là sai một con số — nó có thể là sai cả một trụ, và từ đó sai cả một hướng luận.

Từ khoá: cách tính âm lịch · Julian Day · thuật toán Meeus · điểm sóc · trung khí · Đông Chí · tháng nhuận · múi giờ

Bài viết liên quan

Bình luận

để gửi bình luận.