《歷術甲子篇》所用爲四分曆,歲實365又1/4,朔策29又499/940,亦爲實際的殷歷(建寅爲正)。
殷歷創制於公元前427年(週考王十四年),沿用至公元前105年(漢武帝元封六年,次年改歷),即本表可以用於參照史料的適用範圍。
公元前427年,是年實際天象日月合朔與冬至同日同時,在子時正,位在牽牛初度。符合四分曆的蔀首,干支爲己酉。由此用四分法,反推以蔀首爲甲子的時日作爲曆元,即需要反推15蔀共1140年(BC1167年作爲曆元)。
#設某年的上一年十一月冬至合朔,干支爲甲子,日月在牛宿初度(即十一月甲子夜半朔旦冬至,日月俱起於牽牛之初)
tiangan = ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
dizhi = ["子","醜","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
ganzhi =['']*60
for i in range(60):
ganzhi[i] = tiangan[i%10]+dizhi[(i)%12]
direction = ['正東','正南','正西','正北']
suiyang = ["焉逢","端蒙","遊兆","彊梧","徒維","祝犁","商橫","昭陽","橫艾","尚章"]
suiyin = ["困敦","赤奮若","攝提格","單閼","執徐","大荒落","敦牂","協洽","涒灘","作鄂","淹茂","大淵獻"]
lsjzp = open("歷術甲子篇.csv",'w')
#基本常數
yue = 29+499/940 #朔策
zai = 12 * yue #太陰年
sui = 365+1/4 #歲實
sdrf = 940 #朔旦日法
dzrf = 32 #冬至日法
epoch = -1567 #太初元年爲《歷術甲子篇》曆元,非漢武帝太初元年(-104)
sddy = int(zai) % 60 #朔旦大餘54
sddy_0 = 0 - sddy #朔旦大餘前值
sdxy= (499 * 12 ) % 940 #朔旦小余348
sdxy_0 = 0 - sdxy #朔旦小余前值
dzdy = int(sui) % 60 #冬至大餘
dzdy_0 = 0 - dzdy
dzxy = 8 #冬至小余
dzxy_0 = 0 - dzxy
ry = 0
header = ["公元紀年","干支紀年","年序","年名","紀數","蔀數","蔀首","入蔀年","章數","章首","年前十一月朔旦大餘","年前十一月朔旦小余","年前十一月朔日干支","年前十一月合朔時刻","年前十一月冬至大餘","年前十一月冬至小余","年前十一月冬至干支","年前十一月冬至時刻",'月',"方向"]
lsjzp.write(','.join(header)+'\n')
print("干支紀年","年序","\t 年名","\t\t蔀數","蔀首","入蔀年","章數","章首","前大餘","\t前小余","\t前朔日","\t合朔時刻","\t\t後大餘","\t後小余","\t冬至干支","\t冬至時刻",' 月',"\t 方向")
def qy(dy_0,xy_0,rf,dy,xy): #求大小余分(餘分前值,日法,餘分)
xy_0 += xy
if xy_0 >= rf:
dy_0 += 1
xy_0 -= rf
dy_0 = (dy_0 + dy) % 60
return dy_0,xy_0
def heshuo(yf,rf): #求合朔時間(餘分,日法)
chen = yf / rf * 24 # 合朔時間
chen_h = int(chen)
chen_m = int((chen - chen_h) * 60)
chen_s = int(((chen - chen_h) * 60 - int((chen - chen_h) * 60)) * 60)
hssj = str(chen_h)+'時'+str(chen_m)+'分'+str(chen_s)+'秒'
return hssj
#i+1爲是年,i爲是年前一年
for i in range(4561): #一元=3*一紀=3*20=一蔀=3*20*4*一掌=3*20*4*19
if ry >= 19: #置閏方法:閏餘法
sddy_0,sdxy_0 = qy(sddy_0,sdxy_0,sdrf,sddy+int(yue),sdxy+499) #加一個閏月,大餘爲29,小余爲499
ry -= 19
else:
sddy_0,sdxy_0 = qy(sddy_0,sdxy_0,sdrf,sddy,sdxy)
ry += 7
month = ''
if ry >=19:
yry = (ry-7)*12
for j in range(12):
yry += 7
if yry >=228:
month= '閏' + yuefen[(j - 2+2) % 12]
break
dzdy_0, dzxy_0 = qy(dzdy_0,dzxy_0, dzrf, dzdy, dzxy)
dz = int((dzxy_0/32)*12)
ce = epoch + i
if sdxy_0 == 0: #朔旦無小余時,爲一蔀蔀首
bu = ganzhi[sddy_0] #輸出蔀首名(是年前十一月朔旦冬至干支)
if sddy_0 == dzdy_0: #朔旦大餘=冬至大餘時,爲一章章首
zhang = ganzhi[sddy_0] #輸出章首名
if ce >= 0: ce += 1 #無公元0年
if ce < 0: ce = 'BC'+str(ce)[1:]+'年'
else: ce = "公元"+str(ce)+'年'
ls = [ce,tiangan[i%10]+dizhi[(i+2)%12],i+1,suiyang[i%10]+suiyin[(i+2)%12],(i//1520)%3+1,(i//76)%20+1,bu,i%76+1,i//19+1,zhang,sddy_0,sdxy_0,
ganzhi[sddy_0], heshuo(sdxy_0, 940),dzdy_0,dzxy_0,ganzhi[dzdy_0],str(dz*2)+' '+dizhi[dz]+'時',month,direction[(dz//3-1)%4]]
lsjzp.write(','.join('%s' %id for id in ls)+'\n')
if i < 77: #輸出甲子蔀以供參考
print(ce,'\t ',i+1,'\t',suiyang[i%10]+suiyin[(i+2)%12],'\t',i//1520+1,' ',(i//76+1)%20, '',' ',i%76+1,bu,' ',i//19+1,'',zhang,' ',tiangan[i%10]+dizhi[(i+2)%12],' ',sddy_0, '\t',sdxy_0,'\t',ganzhi[sddy_0],' ',heshuo(sdxy_0, 940),'\t',dzdy_0,'\t',dzxy_0,' \t',ganzhi[dzdy_0],' \t'+str(dz*2)+' '+dizhi[dz]+'時','\t',month,'\t',direction[dz//3-1])
lsjzp.close()
程序運行生成一元三紀4560年的每年年前十一月朔旦冬至的朔閏表(csv格式文件)
甲子蔀 輸出參考(源程序在Python腳本下輸出對齊):
干支紀年 年序 年名 蔀數 蔀首 入蔀年 章數 章首 前大餘 前小余 前朔日 合朔時刻 後大餘 後小余 冬至干支 冬至時刻 閏月 方向
甲寅 1 焉逢攝提格 1 甲子 1 1 甲子 0 0 甲子 0時0分0秒 0 0 甲子 0 子時 正北
乙卯 2 端蒙單閼 1 甲子 2 1 甲子 54 348 戊午 8時53分6秒 5 8 己巳 6 卯時 正東
丙辰 3 遊兆執徐 1 甲子 3 1 甲子 48 696 壬子 17時46分12秒 10 16 甲戌 12 午時 閏6月 正南
丁巳 4 彊梧大荒落 1 甲子 4 1 甲子 12 603 丙子 15時23分44秒 15 24 己卯 18 酉時 正西
戊午 5 徒維敦牂 1 甲子 5 1 甲子 7 11 辛未 0時16分51秒 21 0 乙酉 0 子時 正北
己未 6 祝犁協洽 1 甲子 6 1 甲子 1 359 乙丑 9時9分57秒 26 8 庚寅 6 卯時 閏3月 正東
庚申 7 商橫涒灘 1 甲子 7 1 甲子 25 266 己丑 6時47分29秒 31 16 乙未 12 午時 正南
辛酉 8 昭陽作鄂 1 甲子 8 1 甲子 19 614 癸未 15時40分35秒 36 24 庚子 18 酉時 正西
壬戌 9 橫艾淹茂 1 甲子 9 1 甲子 14 22 戊寅 0時33分42秒 42 0 丙午 0 子時 閏11月 正北
癸亥 10 尚章大淵獻 1 甲子 10 1 甲子 37 869 辛丑 22時11分14秒 47 8 辛亥 6 卯時 正東
甲子 11 焉逢困敦 1 甲子 11 1 甲子 32 277 丙申 7時4分20秒 52 16 丙辰 12 午時 閏8月 正南
乙丑 12 端蒙赤奮若 1 甲子 12 1 甲子 56 184 庚申 4時41分52秒 57 24 辛酉 18 酉時 正西
丙寅 13 遊兆攝提格 1 甲子 13 1 甲子 50 532 甲寅 13時34分58秒 3 0 丁卯 0 子時 正北
丁卯 14 彊梧單閼 1 甲子 14 1 甲子 44 880 戊申 22時28分5秒 8 8 壬申 6 卯時 閏4月 正東
戊辰 15 徒維執徐 1 甲子 15 1 甲子 8 787 壬申 20時5分37秒 13 16 丁丑 12 午時 正南
己巳 16 祝犁大荒落 1 甲子 16 1 甲子 3 195 丁卯 4時58分43秒 18 24 壬午 18 酉時 正西
庚午 17 商橫敦牂 1 甲子 17 1 甲子 57 543 辛酉 13時51分49秒 24 0 戊子 0 子時 閏1月 正北
辛未 18 昭陽協洽 1 甲子 18 1 甲子 21 450 乙酉 11時29分21秒 29 8 癸巳 6 卯時 正東
壬申 19 橫艾涒灘 1 甲子 19 1 甲子 15 798 己卯 20時22分28秒 34 16 戊戌 12 午時 閏9月 正南
癸酉 20 尚章作鄂 1 甲子 20 2 癸卯 39 705 癸卯 18時0分0秒 39 24 癸卯 18 酉時 正西
甲戌 21 焉逢淹茂 1 甲子 21 2 癸卯 34 113 戊戌 2時53分6秒 45 0 己酉 0 子時 正北
乙亥 22 端蒙大淵獻 1 甲子 22 2 癸卯 28 461 壬辰 11時46分12秒 50 8 甲寅 6 卯時 閏6月 正東
丙子 23 遊兆困敦 1 甲子 23 2 癸卯 52 368 丙辰 9時23分44秒 55 16 己未 12 午時 正南
丁丑 24 彊梧赤奮若 1 甲子 24 2 癸卯 46 716 庚戌 18時16分51秒 0 24 甲子 18 酉時 正西
戊寅 25 徒維攝提格 1 甲子 25 2 癸卯 41 124 乙巳 3時9分57秒 6 0 庚午 0 子時 閏3月 正北
己卯 26 祝犁單閼 1 甲子 26 2 癸卯 5 31 己巳 0時47分29秒 11 8 乙亥 6 卯時 正東
庚辰 27 商橫執徐 1 甲子 27 2 癸卯 59 379 癸亥 9時40分35秒 16 16 庚辰 12 午時 正南
辛巳 28 昭陽大荒落 1 甲子 28 2 癸卯 53 727 丁巳 18時33分42秒 21 24 乙酉 18 酉時 閏11月 正西
壬午 29 橫艾敦牂 1 甲子 29 2 癸卯 17 634 辛巳 16時11分14秒 27 0 辛卯 0 子時 正北
癸未 30 尚章協洽 1 甲子 30 2 癸卯 12 42 丙子 1時4分20秒 32 8 丙申 6 卯時 閏8月 正東
甲申 31 焉逢涒灘 1 甲子 31 2 癸卯 35 889 己亥 22時41分52秒 37 16 辛丑 12 午時 正南
乙酉 32 端蒙作鄂 1 甲子 32 2 癸卯 30 297 甲午 7時34分58秒 42 24 丙午 18 酉時 正西
丙戌 33 遊兆淹茂 1 甲子 33 2 癸卯 24 645 戊子 16時28分5秒 48 0 壬子 0 子時 閏4月 正北
丁亥 34 彊梧大淵獻 1 甲子 34 2 癸卯 48 552 壬子 14時5分37秒 53 8 丁巳 6 卯時 正東
戊子 35 徒維困敦 1 甲子 35 2 癸卯 42 900 丙午 22時58分43秒 58 16 壬戌 12 午時 正南
己丑 36 祝犁赤奮若 1 甲子 36 2 癸卯 37 308 辛丑 7時51分49秒 3 24 丁卯 18 酉時 閏1月 正西
庚寅 37 商橫攝提格 1 甲子 37 2 癸卯 1 215 乙丑 5時29分21秒 9 0 癸酉 0 子時 正北
辛卯 38 昭陽單閼 1 甲子 38 2 癸卯 55 563 己未 14時22分28秒 14 8 戊寅 6 卯時 閏9月 正東
壬辰 39 橫艾執徐 1 甲子 39 3 癸未 19 470 癸未 12時0分0秒 19 16 癸未 12 午時 正南
癸巳 40 尚章大荒落 1 甲子 40 3 癸未 13 818 丁丑 20時53分6秒 24 24 戊子 18 酉時 正西
甲午 41 焉逢敦牂 1 甲子 41 3 癸未 8 226 壬申 5時46分12秒 30 0 甲午 0 子時 閏6月 正北
乙未 42 端蒙協洽 1 甲子 42 3 癸未 32 133 丙申 3時23分44秒 35 8 己亥 6 卯時 正東
丙申 43 遊兆涒灘 1 甲子 43 3 癸未 26 481 庚寅 12時16分51秒 40 16 甲辰 12 午時 正南
丁酉 44 彊梧作鄂 1 甲子 44 3 癸未 20 829 甲申 21時9分57秒 45 24 己酉 18 酉時 閏3月 正西
戊戌 45 徒維淹茂 1 甲子 45 3 癸未 44 736 戊申 18時47分29秒 51 0 乙卯 0 子時 正北
己亥 46 祝犁大淵獻 1 甲子 46 3 癸未 39 144 癸卯 3時40分35秒 56 8 庚申 6 卯時 正東
庚子 47 商橫困敦 1 甲子 47 3 癸未 33 492 丁酉 12時33分42秒 1 16 乙丑 12 午時 閏11月 正南
辛丑 48 昭陽赤奮若 1 甲子 48 3 癸未 57 399 辛酉 10時11分14秒 6 24 庚午 18 酉時 正西
壬寅 49 橫艾攝提格 1 甲子 49 3 癸未 51 747 乙卯 19時4分20秒 12 0 丙子 0 子時 閏8月 正北
癸卯 50 尚章單閼 1 甲子 50 3 癸未 15 654 己卯 16時41分52秒 17 8 辛巳 6 卯時 正東
甲辰 51 焉逢執徐 1 甲子 51 3 癸未 10 62 甲戌 1時34分58秒 22 16 丙戌 12 午時 正南
乙巳 52 端蒙大荒落 1 甲子 52 3 癸未 4 410 戊辰 10時28分5秒 27 24 辛卯 18 酉時 閏4月 正西
丙午 53 遊兆敦牂 1 甲子 53 3 癸未 28 317 壬辰 8時5分37秒 33 0 丁酉 0 子時 正北
丁未 54 彊梧協洽 1 甲子 54 3 癸未 22 665 丙戌 16時58分43秒 38 8 壬寅 6 卯時 正東
戊申 55 徒維涒灘 1 甲子 55 3 癸未 17 73 辛巳 1時51分49秒 43 16 丁未 12 午時 閏1月 正南
己酉 56 祝犁作鄂 1 甲子 56 3 癸未 40 920 甲辰 23時29分21秒 48 24 壬子 18 酉時 正西
庚戌 57 商橫淹茂 1 甲子 57 3 癸未 35 328 己亥 8時22分28秒 54 0 戊午 0 子時 閏9月 正北
辛亥 58 昭陽大淵獻 1 甲子 58 4 癸亥 59 235 癸亥 6時0分0秒 59 8 癸亥 6 卯時 正東
壬子 59 橫艾困敦 1 甲子 59 4 癸亥 53 583 丁巳 14時53分6秒 4 16 戊辰 12 午時 正南
癸丑 60 尚章赤奮若 1 甲子 60 4 癸亥 47 931 辛亥 23時46分12秒 9 24 癸酉 18 酉時 閏6月 正西
甲寅 61 焉逢攝提格 1 甲子 61 4 癸亥 11 838 乙亥 21時23分44秒 15 0 己卯 0 子時 正北
乙卯 62 端蒙單閼 1 甲子 62 4 癸亥 6 246 庚午 6時16分51秒 20 8 甲申 6 卯時 正東
丙辰 63 遊兆執徐 1 甲子 63 4 癸亥 0 594 甲子 15時9分57秒 25 16 己丑 12 午時 閏3月 正南
丁巳 64 彊梧大荒落 1 甲子 64 4 癸亥 24 501 戊子 12時47分29秒 30 24 甲午 18 酉時 正西
戊午 65 徒維敦牂 1 甲子 65 4 癸亥 18 849 壬午 21時40分35秒 36 0 庚子 0 子時 正北
己未 66 祝犁協洽 1 甲子 66 4 癸亥 13 257 丁丑 6時33分42秒 41 8 乙巳 6 卯時 閏11月 正東
庚申 67 商橫涒灘 1 甲子 67 4 癸亥 37 164 辛丑 4時11分14秒 46 16 庚戌 12 午時 正南
辛酉 68 昭陽作鄂 1 甲子 68 4 癸亥 31 512 乙未 13時4分20秒 51 24 乙卯 18 酉時 閏8月 正西
壬戌 69 橫艾淹茂 1 甲子 69 4 癸亥 55 419 己未 10時41分52秒 57 0 辛酉 0 子時 正北
癸亥 70 尚章大淵獻 1 甲子 70 4 癸亥 49 767 癸丑 19時34分58秒 2 8 丙寅 6 卯時 正東
甲子 71 焉逢困敦 1 甲子 71 4 癸亥 44 175 戊申 4時28分5秒 7 16 辛未 12 午時 閏4月 正南
乙丑 72 端蒙赤奮若 1 甲子 72 4 癸亥 8 82 壬申 2時5分37秒 12 24 丙子 18 酉時 正西
丙寅 73 遊兆攝提格 1 甲子 73 4 癸亥 2 430 丙寅 10時58分43秒 18 0 壬午 0 子時 正北
丁卯 74 彊梧單閼 1 甲子 74 4 癸亥 56 778 庚申 19時51分49秒 23 8 丁亥 6 卯時 閏1月 正東
戊辰 75 徒維執徐 1 甲子 75 4 癸亥 20 685 甲申 17時29分21秒 28 16 壬辰 12 午時 正南
己巳 76 祝犁大荒落 1 甲子 76 4 癸亥 15 93 己卯 2時22分28秒 33 24 丁酉 18 酉時 閏9月 正西
庚午 77 商橫敦牂 2 癸卯 1 1 癸卯 39 0 癸卯 0時0分0秒 39 0 癸卯 0 子時 正北