有計算公式, 需要準確的太陽與月球位置軌道參數,
1) 計算太陽過 "視"黃經度 0, 15 30 45.. 度的時間(120 度平太陽時, 轉為曆表時),
發生的那天以定節氣. 0 度為春分, 15 度為清明. (這樣就知道為何清明有時 4/3 有
時4/4 有時 4/5 日了吧)
2) 計算太陽與月球"視"黃經合度的 120 度平太陽時, 轉曆表時, 發生的那天定陰曆初
一. (這樣就知道大小月沒有規則了吧)
3) 綜合 1,2 含有雨水中氣的那月為陰曆一月,
4) 綜合 1,2 沒有中氣的月份為閏月. (這樣就知道閏月排列沒規則了)
附計算太陽月亮每日視黃經的公式, (依據 1975 年日本防衛廳水路部公告的軌道參數,
估計到 2025 年精確度至1 分鐘內)
算出時間後, 用 Bessel 內插補間法找出發生視黃經 0,15,30,... 日月黃經合的時間,
這樣的公式很多, 最後要改為 120 度曆表時, 這才是算中國曆法需要的, 注意, 差幾
秒鐘可能陰曆差一天, 大月變小月, 閏月消失, 清明 4/4 變 4/5 事情就大條了...
<結果說明>
JD 日期 太陽視黃經 太陽距離 月球視黃經 月球視黃緯
2440000.5, 62.8800, 1.01283, 26.9015, 0.7963
2440001.5, 63.8408, 1.01301, 38.7390, 1.8258
2440002.5, 64.8014, 1.01319, 50.5442, 2.7715
2440003.5, 65.7617, 1.01336, 62.3586, 3.5963---- 由此二計算太陽月球黃經
合的時刻定初一時刻
2440004.5, 66.7216, 1.01353, 74.2156, 4.2669----
2440005.5, 67.6812, 1.01370, 86.1435, 4.7543
2440006.5, 68.6405, 1.01386, 98.1688, 5.0352
2440007.5, 69.5994, 1.01401, 110.3203, 5.0926
2440008.5, 70.5579, 1.01416, 122.6325, 4.9165
2440009.5, 71.5162, 1.01430, 135.1467, 4.5044
2440010.5, 72.4740, 1.01444, 147.9107, 3.8623
2440011.5, 73.4315, 1.01457, 160.9761, 3.0064
2440012.5, 74.3887, 1.01471, 174.3930, 1.9645----- 由此二算太陽在 75 度
時的時間, 定"芒種" 時刻
2440013.5, 75.3455, 1.01483, 188.2023, 0.7798-----
2440014.5, 76.3020, 1.01496, 202.4235, -0.4862
2440015.5, 77.2582, 1.01508, 217.0399, -1.7531
<公式一>
DECLARE SUB CallMoon (T#, L#, B#, P#)
DECLARE SUB CalSun (T#, LS#, RS#, P#)
DECLARE SUB ReadYangMonth (YangYears%, YangMonths%())
' REM DATE 1995,12,27 TIME 04.15
P# = 180 / 3.14159265359#
CLS
CalMain:
' USE JD0 = 1975/01/00, 0H ET (JD=2442412.5), D= (JD-JD0)/365.25, (ET
SYSTEM)
J0# = 2442412.5#
INPUT "START FROM JD="; JD#
INPUT "FOR HOW MANY DAYS "; DC#
INPUT "FILE NAME "; FI$
OPEN "O", #1, FI$
FOR D# = 0 TO DC#
'
T# = (JD# - J0#) / 365.25
'PRINT "FOR JD ="; J0# + D#; " ";
CALL CalSun(T#, SUNLS#, RS#, P#)
REM SunLS# = SunLS# MOD 360
SUNLS# = 360 * (SUNLS# / 360 - INT(SUNLS# / 360))
'DO WHILE SUNLS# > 360
' SUNLS# = SUNLS# - 360
'LOOP
' PRINT "Sun LS="; SunLS#; "RS="; RS#
CALL CallMoon(T#, MOONLS#, B#, P#)
MOONLS# = 360 * (MOONLS# / 360 - INT(MOONLS# / 360))
'REM MoonLS# = MoonLS# MOD 360
'DO WHILE MOONLS# > 360
' MOONLS# = MOONLS# - 360
'LOOP
' PRINT "Moon LS="; MoonLS#; "B="; B#
PRINT USING "#######.# ###.#### #.##### ###.#### ###.####"; JD#;
SUNLS#; RS#; MOONLS#; B#
PRINT #1, USING " #######.#, ###.####, #.#####, ###.####, ###.####";
JD#; SUNLS#; RS#; MOONLS#; B#
JD# = JD# + 1
NEXT D#
CLOSE #1
END
' RETURN
SUB CallMoon (T#, L#, B#, P#) STATIC
A# = 0
A# = A# + .004 * SIN((93.8 - 1.33 * T#) / P#)
A# = A# + .002 * SIN((248.6 - 19.34 * T#) / P#)
A# = A# + .0006 * SIN((66 + .2 * T#) / P#)
A# = A# + .0006 * SIN((249 - 19.3 * T#) / P#)
L# = 124.8754 + 4812.67881# * T#
L# = L# + 6.2887 * SIN((338.915 + 4771.9886# * T# + A#) / P#)
L# = L# + 1.274 * SIN((107.248 - 4133.3536# * T#) / P#)
L# = L# + .6583 * SIN((51.668 + 8905.342199999999# * T#) / P#)
L# = L# + .2136 * SIN((317.831 + 9543.9773# * T#) / P#)
L# = L# + .1856 * SIN((176.531 + 359.9905 * T#) / P#)
L# = L# + .1143 * SIN((292.463 + 9664.0404# * T#) / P#)
L# = L# + .0588 * SIN((86.16 + 638.635 * T#) / P#)
L# = L# + .0572 * SIN((103.78 - 3773.363 * T#) / P#)
L# = L# + .0533 * SIN((30.58 + 13677.331# * T#) / P#)
L# = L# + .0459 * SIN((124.86 - 8545.352 * T#) / P#)
L# = L# + .041 * SIN((342.38 + 4411.998 * T#) / P#)
L# = L# + .0348 * SIN((25.83 + 4452.671 * T#) / P#)
L# = L# + .0305 * SIN((155.45 + 5131.979 * T#) / P#)
L# = L# + .0153 * SIN((240.79 + 758.698 * T#) / P#)
L# = L# + .0125 * SIN((271.38 + 14436.029# * T#) / P#)
L# = L# + .011 * SIN((226.45 - 4892.052 * T#) / P#)
L# = L# + .0107 * SIN((55.58 - 13038.696# * T#) / P#)
L# = L# + .01 * SIN((296.75 + 14315.966# * T#) / P#)
L# = L# + .0085 * SIN((34.5 - 8266.71 * T#) / P#)
L# = L# + .0079 * SIN((290.7 - 4493.34 * T#) / P#)
L# = L# + .0068 * SIN((228.2 + 9265.33 * T#) / P#)
L# = L# + .0052 * SIN((133.1 + 319.32 * T#) / P#)
L# = L# + .005 * SIN((202.4 + 4812.66 * T#) / P#)
L# = L# + .0048 * SIN((68.6 - 19.34 * T#) / P#)
L# = L# + .004 * SIN((34.1 + 13317.34 * T#) / P#)
L# = L# + .004 * SIN((9.5 + 18449.32 * T#) / P#)
L# = L# + .004 * SIN((93.8 - 1.33 * T#) / P#)
L# = L# + .0039 * SIN((103.3 + 17810.68 * T#) / P#)
L# = L# + .0037 * SIN((65.1 + 5410.62 * T#) / P#)
L# = L# + .0027 * SIN((321.3 + 9183.99 * T#) / P#)
L# = L# + .0026 * SIN((174.8 - 13797.39 * T#) / P#)
L# = L# + .0024 * SIN((82.7 + 998.63 * T#) / P#)
L# = L# + .0024 * SIN((4.7 + 9224.66 * T#) / P#)
L# = L# + .0022 * SIN((121.4 - 8185.36 * T#) / P#)
L# = L# + .0021 * SIN((134.4 + 9903.97 * T#) / P#)
L# = L# + .0021 * SIN((173.1 + 719.98 * T#) / P#)
L# = L# + .0021 * SIN((100.3 - 3413.37 * T#) / P#)
L# = L# + .002 * SIN((248.6 - 19.34 * T#) / P#)
L# = L# + .0018 * SIN((98.1 + 4013.29 * T#) / P#)
L# = L# + .0016 * SIN((344.1 + 18569.38 * T#) / P#)
L# = L# + .0012 * SIN((52.1 - 12678.71 * T#) / P#)
L# = L# + .0011 * SIN((250.3 + 19208.02 * T#) / P#)
L# = L# + .0009 * SIN((81 - 8586! * T#) / P#)
L# = L# + .0008 * SIN((207 + 14037.3 * T#) / P#)
L# = L# + .0008 * SIN((31 - 7906.7 * T#) / P#)
L# = L# + .0007 * SIN((346 + 4052! * T#) / P#)
L# = L# + .0007 * SIN((294 - 4853.3 * T#) / P#)
L# = L# + .0007 * SIN((90 + 278.6 * T#) / P#)
L# = L# + .0006 * SIN((237 + 1118.7 * T#) / P#)
L# = L# + .0005 * SIN((82 + 22582.7 * T#) / P#)
L# = L# + .0005 * SIN((276 + 19088! * T#) / P#)
L# = L# + .0005 * SIN((73 - 17450.7 * T#) / P#)
L# = L# + .0005 * SIN((112 + 5091.3 * T#) / P#)
L# = L# + .0004 * SIN((116 - 398.7 * T#) / P#)
L# = L# + .0004 * SIN((25 - 120.1 * T#) / P#)
REM 203 Page
L# = L# + .0004 * SIN((181 + 9584.7 * T#) / P#)
L# = L# + .0004 * SIN((18 + 720! * T#) / P#)
L# = L# + .0003 * SIN((60 - 3814! * T#) / P#)
L# = L# + .0003 * SIN((13 - 3494.7 * T#) / P#)
L# = L# + .0003 * SIN((13 + 18089.3 * T#) / P#)
L# = L# + .0003 * SIN((152 + 5492! * T#) / P#)
L# = L# + .0003 * SIN((317 - 40.7 * T#) / P#)
L# = L# + .0003 * SIN((348 + 23221.3 * T#) / P#)
REM ?
B1# = 0
B1# = B1# + .0267 * SIN((68.64 - 19.341 * T#) / P#)
B1# = B1# + .0043 * SIN((342! - 19.36 * T#) / P#)
B1# = B1# + .004 * SIN((93.8 - 1.33 * T#) / P#)
B1# = B1# + .002 * SIN((248.6 - 19.34 * T#) / P#)
B1# = B1# + .0005 * SIN((358 - 19.4 * T#) / P#)
REM B
B# = 0
B# = B# + 5.1282 * SIN((236.231 + 4832.0202# * T# + B1#) / P#)
B# = B# + .2806 * SIN((215.147 + 9604.0088# * T#) / P#)
B# = B# + .2777 * SIN((77.316 + 60.0316 * T#) / P#)
B# = B# + .1732 * SIN((4.563 - 4073.322# * T#) / P#)
B# = B# + .0554 * SIN((308.98 + 8965.374 * T#) / P#)
B# = B# + .0463 * SIN((343.48 + 698.667 * T#) / P#)
B# = B# + .0326 * SIN((287.9 + 13737.362# * T#) / P#)
B# = B# + .0172 * SIN((194.06 + 14375.997# * T#) / P#)
B# = B# + .0093 * SIN((25.6 - 8845.31 * T#) / P#)
B# = B# + .0088 * SIN((98.4 - 4711.96 * T#) / P#)
B# = B# + .0082 * SIN((1.1 - 3713.33 * T#) / P#)
B# = B# + .0043 * SIN((322.4 + 5470.66 * T#) / P#)
B# = B# + .0042 * SIN((266.8 + 18509.35 * T#) / P#)
B# = B# + .0034 * SIN((188! - 4433.31 * T#) / P#)
B# = B# + .0025 * SIN((312.5 + 8605.38 * T#) / P#)
B# = B# + .0022 * SIN((291.4 + 13377.37 * T#) / P#)
B# = B# + .0021 * SIN((340! + 1058.66 * T#) / P#)
B# = B# + .0019 * SIN((218.6 + 9244.02 * T#) / P#)
B# = B# + .0018 * SIN((291.8 - 8206.68 * T#) / P#)
B# = B# + .0018 * SIN((52.8 + 5192.01 * T#) / P#)
B# = B# + .0017 * SIN((168.7 + 14496.06 * T#) / P#)
B# = B# + .0016 * SIN((73.8 + 420.02 * T#) / P#)
B# = B# + .0015 * SIN((262.1 + 9284.69 * T#) / P#)
B# = B# + .0015 * SIN((31.7 + 9964! * T#) / P#)
B# = B# + .0014 * SIN((260.8 - 299.96 * T#) / P#)
B# = B# + .0013 * SIN((239.7 + 4472.03 * T#) / P#)
B# = B# + .0013 * SIN((30.4 + 379.35 * T#) / P#)
B# = B# + .0012 * SIN((304.9 + 4812.68 * T#) / P#)
B# = B# + .0012 * SIN((12.4 - 4851.36 * T#) / P#)
B# = B# + .0011 * SIN((173! + 19147.99 * T#) / P#)
B# = B# + .001 * SIN((312.9 - 12978.66 * T#) / P#)
B# = B# + .0008 * SIN((1 + 17870.7 * T#) / P#)
B# = B# + .0008 * SIN((190 + 9724.1 * T#) / P#)
B# = B# + .0007 * SIN((22 + 13098.7 * T#) / P#)
B# = B# + .0006 * SIN((117 + 5590.7 * T#) / P#)
B# = B# + .0006 * SIN((47 - 13617.3 * T#) / P#)
B# = B# + .0005 * SIN((22 - 8485.3 * T#) / P#)
B# = B# + .0005 * SIN((150 + 4193.4 * T#) / P#)
B# = B# + .0004 * SIN((119 - 9483.9 * T#) / P#)
B# = B# + .0004 * SIN((246 + 23281.3 * T#) / P#)
B# = B# + .0004 * SIN((301 + 10242.6 * T#) / P#)
B# = B# + .0004 * SIN((126 + 9325.4 * T#) / P#)
B# = B# + .0004 * SIN((104 + 14097.4 * T#) / P#)
B# = B# + .0003 * SIN((340 + 22642.7 * T#) / P#)
B# = B# + .0003 * SIN((270 + 18149.4 * T#) / P#)
B# = B# + .0003 * SIN((358 - 3353.3 * T#) / P#)
B# = B# + .0003 * SIN((148 + 19268! * T#) / P#)
END SUB
SUB CalSun (T#, LS#, RS#, P#) STATIC
LS# = 0
LS# = LS# + 279.0358 + 360.00769# * T#
LS# = LS# + (1.9159 - .00005 * T#) * SIN((356.531 + 359.991 * T#) /
P#)
LS# = LS# + .02 * SIN((353.06 + 719.981 * T#) / P#)
LS# = LS# - .0048 * SIN((248.64 - 19.341 * T#) / P#)
LS# = LS# + .002 * SIN((285! + 329.64 * T#) / P#)
LS# = LS# + .0018 * SIN((334.2 - 4452.67 * T#) / P#)
LS# = LS# + .0018 * SIN((293.7 - .2 * T#) / P#)
LS# = LS# + .0015 * SIN((242.4 + 450.37 * T#) / P#)
LS# = LS# + .0013 * SIN((211.1 + 225.18 * T#) / P#)
LS# = LS# + .0008 * SIN((208! + 659.29 * T#) / P#)
LS# = LS# + .0007 * SIN((53.5 + 90.38 * T#) / P#)
LS# = LS# + .0007 * SIN((12.1 - 30.35 * T#) / P#)
LS# = LS# + .0006 * SIN((239.1 + 337.18 * T#) / P#)
LS# = LS# + .0005 * SIN((10.1 - 1.5 * T#) / P#)
LS# = LS# + .0005 * SIN((99.1 - 22.81 * T#) / P#)
LS# = LS# + .0004 * SIN((264.8 + 315.56 * T#) / P#)
LS# = LS# + .0004 * SIN((233.8 + 299.3 * T#) / P#)
LS# = LS# - .0004 * SIN((198.1 + 720.02 * T#) / P#)
LS# = LS# + .0003 * SIN((349.6 + 1079.97 * T#) / P#)
LS# = LS# + .0003 * SIN((241.2 - 44.43 * T#) / P#)
Q# = 0
Q# = Q# + (-.007261 + .0000002# * T#) * COS((356.53 + 359.991 * T#)
/ P#) + .00003
Q# = Q# - .000091 * COS((353.1 + 719.98 * T#) / P#)
Q# = Q# + .000013 * COS((205.8 + 4452.67 * T#) / P#)
Q# = Q# + .000007 * COS((62 + 450.4 * T#) / P#)
Q# = Q# + .000007 * COS((105 + 329.6 * T#) / P#)
'PRINT Q#
RS# = 10 ^ Q#
END SUB
"我只是一個業餘的愛好者" <Traveler@somewhere.universe> 撰寫於郵件新聞
:avte6i$n8q$1@news.cs.nthu.edu.tw...
> 首先
> 我們現在的曆法並沒有使用很久
> 印象沒錯的話
> 不超過一千年
> 所以往回推的意義不大
> (應該也沒有公式解,因為不規則)
>
> 但是如果執意要用現在的曆法往回推
> 計算方法則完全相同
>
> 首先
> 西元元年 的日曆會和 西元2001年 相同
> 因為 2001 mod 400 = 1
>
> 因此
> 西元600年 的日曆會和 西元200年 相同,也會和 西元2200年 相同
> 因為 200 mod 400 = 600 mod 400 = 2200 mod 400 = 200
>
> (1 + (2200 - 2001) + int((2200 - 2001)/4) - int((2200 - 2001)/100)) mod 7
= 3
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 期間有多少個潤年
>
> 因此,西元600年的1月1日是星期三
> 剩下的就都一樣了
>
> 這個 form 已經跟公式非常地像了
> 如果您想寫程式
> 下面的式子可以給您當參考
>
> Let Y = (Year - 1) mod 400
> W = (1 + Y + int(Y/4) - int(Y/100)) mod 7
>
>
> 我比較有興趣的是
> 存不存在國曆和農曆的轉換的公式解
> (可以是任何形式的計算步驟,但是不包括查表法)
>
>
>
> "誰知道萬年曆公式??" <nj.bbs@bbs.ndhu.edu.tw> 撰寫於郵件新聞
> :44HPci$5Xe@bbs.ndhu.edu.tw...
> > ※ 引述《"我只是一個業餘的愛好者" <Traveler@somewhere.universe>, 看板:
Sky》之
> 銘言:
> > : 詳細的“公式”,我沒有記
> > : 但是不難推算
> > : 365 mod 7 = 1
> > : 所以沒有潤年的話,同一日期,每年會差一天
> > : 例如:今年(2003)的 1/1 是星期三,明年(2004)的 1/1 就是星期四
> > : 有潤年當然就是差兩天囉
> > : 因為明年(2004)是潤年
> > : 所以,後年(2005)的 1/1 就是星期六了
> > : 如此這般
> > : 找一天當基準
> > : 就可以算出其他任何一天是星期幾了
> > : 通常是用 1/1 作基準(而且通常是用 2001/1/1)
> > : 然後去算 ?/? 是一年當中的第幾天
> > : 例如:
> > : 已知 2001/1/1 是星期一 ──┐ ┌─ 沒有潤年
> > : │ │
> > : 則今年的 1/1 是星期三 1 + (2003-2001) + 0 = 3
> > : └───────────────┘
> > : 則今年的 4/5 是星期幾?
> > : (3 + (31+28+31+5) - 1) mod 7 = 6
> > : 另外
> > : 2001年的 1/1 會和 2401 年的 1/1 同一天
> > : 因為 400 年就差了 400 天
> > : 又潤了 97 次,差了 97 天
> > : (400 + 97) mod 7 = 0
> > : 有錯請指教
> >
> > 先謝謝你花時間解釋...
> > 你的理論想法跟我一樣..
> > 不過這大概適用於最近幾年的吧..
> > 例如..如果我問西元600年的6月6日星期幾呢?
> > 可不可以用很快時間計算就可以算出了嗎??
> > 會不會有一種簡單的公式呢?
> > 謝謝你的回答!
>
>