对于公元纪年、干支纪年、王公纪年、正月、蔀首等,凡年皆以岁首为分界,与建正无关。
公元纪年:公元前以负号表示,而不使用“公元前”或“BC”,以方便利用搜索功能。岁首为阳历1月(大寒所在月)。
干支纪年:以岁首判断纪年,而非正月。古六历中,颛顼历岁首为亥月,其余岁首皆为子月。表格以干支纪年分行。
王公纪年与干支纪年一致。
正月:除颛顼历建正与岁首不同外,其余皆相同。
蔀首月即历元岁首。
四分术
#古六历所用四分历术
tiangan = ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
dizhi = ["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
yuefen =["正月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]
jieqi = ["冬至","小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪"]
nlrq=["初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二一","二二","二三","二四","二五","二六","二七","二八","二九","三十"]
gz =['']*60 #六十甲子表
for i in range(60):
gz[i] = tiangan[i%10]+dizhi[i%12]
bsgz=[0]*20 #蔀首干支
for i in range(20):
bsgz[i] = (i*39)%60
yue = 29+499/940 #朔策
zai = 12 * yue #太阴年
sui = 365+1/4 #岁实
sddy = int(zai) % 60 #朔旦大余
sdxy= (499 * 12 ) % 940 #朔旦小余
sdrf = 940 #朔旦日法
zqi = sui/12 #中气30又14/32
zqrf = 32
zqdy = 30
zqxy = 14
ydy = int(yue)
yxy = 499 #每月小余499
yueri = 0
yueri_0 = -29
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 dxy(xy_0): #判断大小月
if xy_0 < 441:
return "小"
else:
return "大"
def wzqy(dy_0,xy_0,sdy_0,sxy_0): #无中气月(气大小余、朔大余、朔小余)
global zqdy_0,zqxy_0,yueri_0,yueri
if dxy(sxy_0) == "大": yueri = 30
else:yueri = 29
if (int(dy_0+xy_0/32+zqi)-sdy_0)%60>=yueri: #上一个中气值加中气日数即预推下一个中气的值,下一中气不在该月中则该月无中气
x = True
return x,dy_0,xy_0
else:
dy_0, xy_0 = qy(dy_0, xy_0, zqrf, zqdy, zqxy)
x = False
return x,dy_0,xy_0
王年
#周BC841-BC256
zhou_name = ["共和","宣王","幽王","平王","桓王","庄王","釐(僖)王","惠王","襄王","顷王","匡王","定王","简王","灵王","景王","敬王","元王","贞定王","考王","威烈王","安王","烈王","显王","慎靓王","郝王"]
zhou_year = [14,46,11,51,23,15,5,25,33,6,6,21,14,27,25,43,8,28,15,24,26,7,48,6,59]
#鲁BC855-BC477
lu_name = ["真公","武公","懿公","孝公","惠公","隐公","桓公","庄公","湣(闵)公","釐(僖)公","文公","宣公","成公","襄公","昭公","定公","哀公"]
lu_year = [30,10,9,38,46,11,18,32,2,33,18,18,18,31,32,15,18]
#秦BC255-BC206
qin_name = ["昭王","惠文王","庄襄王","始皇帝","二世"]
qin_year = [56,1,3,37,3]
#汉BC206-BC104
han_name = ["高祖","惠帝","高后","文帝","景帝","武帝"]
han_nh = [[''],[''],[''],['','后元'],['','中元','后元'],['建元','元光','元朔','元狩','元鼎','元封','太初']]
han_year = [[12],[7],[8],[16,7],[7,6,3],[6,6,6,6,6,6,4]]
def sz2hz(x): #数字转为汉字
hzjs = ["一","二","三","四","五","六","七","八","九","十"]
if x == 0: # 1
return '元'
elif x < 10: # 2-9
return hzjs[x]
elif 9<x<19: # 10-19
return hzjs[9]+hzjs[int(str(x)[1])]
elif (x+1)%10 == 0: # 20以上的整十
return hzjs[int(str(x)[0])]+hzjs[int(str(x)[1])]
else:
return hzjs[int(str(x)[0])-1]+hzjs[9]+hzjs[int(str(x)[1])]
def wnh(guohao,name,year,x): #无年号
global ce
ce = ce - x
for i in range(len(name)):
for j in range(year[i]):
if (i == 0 and j >= x) or i > 0: #非首年
wgjn[ce+841] = guohao + name[i] + sz2hz(j) + '年'
ce += 1
return wgjn
def ynh(guohao,name,nianhao,year): #有年号
global ce
for i in range(len(name)):
for j in range(len(nianhao[i])):
for k in range(year[i][j]):
wgjn[ce + 841] = guohao + name[i] + nianhao[i][j] + sz2hz(k) + '年'
ce += 1
return wgjn
ce = -841
wgjn = ['']*(1000)
lgwn = ['']*365
wnh('鲁', lu_name, lu_year, 14)
for i in range(365):
lgwn[i] = wgjn[i]
ce = -841
wnh('周', zhou_name, zhou_year, 0)
wnh('秦', qin_name, qin_year, 51)
ynh('汉', han_name, han_nh, han_year)
for i in range(365):
wgjn[i] = wgjn[i] + '、' + lgwn[i]
黄帝历朔闰表及历表(正月建子,历元天正甲子冬至合朔)
from wangnian import *
from sfs import *
zqdy_0 = 57 - zqdy
zqxy_0 = 0 - zqxy
ydy_0 = 46 - ydy
yxy_0 = 113 - yxy
ly = -1350
lygz = 27
hdlb = []
j = 0
x = 0
y = 0
ry = 0
yry = 77
jqcx = 1
yln = -722
hdlsrb = open("黄帝历朔闰表.csv",'w')
hdllb = open("黄帝历历表.csv",'w')
jqdy_0,jqxy_0 = qy(zqdy_0,zqxy_0,zqrf,zqdy//2,zqxy//2)
header = ["公元纪年","王年","干支纪年","蔀名","入蔀年","月份","朔日干支","朔日大余","朔日小余","中气","中气干支","中气大余","中气小余","中气日期","年中置闰","年终置闰"]
hdlsrb.write(','.join(header)+'\n')
header2 = ["公元纪年","干支纪年","月份","中气","中气干支","节气","节气干支",'']
hdllb.write(','.join(header2+nlrq)+'\n')
while yln < -103:
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, ydy, yxy)
zr,zqdy_0,zqxy_0 = wzqy(zqdy_0,zqxy_0,ydy_0,yxy_0)
wjq, jqdy_0, jqxy_0 = wzqy(jqdy_0, jqxy_0, ydy_0,yxy_0)
#节气
if wjq == True:
jq = "无节气"
jqgz = "\t"
else:
jq = jieqi[jqcx % 24]
jqgz = gz[jqdy_0 % 60]
jqcx += 2
#年终置闰
if j % 12 == 0 and zr == False:
ry += 7
x = 0
y = 0
if ry >= 19:
ry -= 19
month = yuefen[ x % 12]
x += 1
y += 1
if x == 13:
month = "闰十二月"
#年中置闰
nzzr = yuefen[ (y-1) % 12]
if yry + 7 >= 228:
y -= 1
nzzr = '闰'+yuefen[(y-1)%12]
yry -= 228
else:
yry += 7
#历表
if zr == True:
j -= 1
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce ,gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,"闰" + yuefen[j % 12] + dxy(yxy_0),gz[ydy_0%60], (ydy_0-bsgz[rbs%20]) % 60,yxy_0, "无中气",'','','','',nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],"闰" + yuefen[j % 12] + dxy(yxy_0),"无中气",'',jq,jqgz,'']
else:
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,yuefen[j % 12] + dxy(yxy_0), gz[ydy_0%60],(ydy_0-bsgz[rbs%20]) % 60,yxy_0,jieqi[j%12*2], gz[zqdy_0%60],(zqdy_0-bsgz[rbs%20])%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30],nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],yuefen[j % 12] + dxy(yxy_0),jieqi[j%12*2], gz[zqdy_0%60],jq,jqgz,'']
yueri_0 = yueri
for k in range(yueri_0):
hdlb.append(gz[(ydy_0+k) % 60])
if j % 12 == 0 and j != 0 and zr == False:
hdlsrb.write('\n')
hdllb.write('\n')
j += 1
hdlsrb.write(','.join('%s' % id for id in srb) + '\n')
hdllb.write(','.join('%s' % id for id in hlb+hdlb) + '\n')
hdlb.clear()
颛顼历朔闰表及历表(正月建寅,历元人正己巳立春合朔,十月岁首)
from wangnian import *
from sfs import *
zqdy_0 = 10 - zqdy #正月立春
zqxy_0 = 18 - zqxy
ydy_0 = 16 - ydy #正月朔
yxy_0 = 124 - yxy
ly = -1506
lygz = 51
zxlb = []
j = -1
x = 0
y = 0
ry = 0
yry = 0
jqcx = -1
yln = -722
zxlsrb = open("颛顼历朔闰表(历元立春).csv",'w')
zxllb = open("颛顼历历表(历元立春).csv",'w')
#将历元雨水调为历元冬至
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, 2*-ydy, 2*-yxy)
zqdy_0,zqxy_0 = qy(zqdy_0,zqxy_0,zqrf,-zqdy*3//2,-zqxy*3//2)
jqdy_0,jqxy_0 = qy(zqdy_0,zqxy_0,zqrf,zqdy//2,zqxy//2)
header = ["公元纪年","干支纪年","蔀名","入蔀年","月份","月名","朔日干支","朔日大余","朔日小余","中气","中气干支","中气大余","中气小余","中气日期","年中置闰"]
zxlsrb.write(','.join(header)+'\n')
header2 = ["公元纪年","干支纪年","月份","月名","中气","中气干支","节气","节气干支",'']
zxllb.write(','.join(header2+nlrq)+'\n')
while yln < -103:
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, ydy, yxy)
zr,zqdy_0,zqxy_0 = wzqy(zqdy_0,zqxy_0,ydy_0,yxy_0)
wjq,jqdy_0,jqxy_0 = wzqy(jqdy_0,jqxy_0,ydy_0,yxy_0)
if wjq == True:
jq = "无节气"
jqgz = "\t"
else:
jq = jieqi[(jqcx) % 24]
jqgz = gz[jqdy_0 % 60]
jqcx += 2
if (j+1) % 12 == 0 and zr == False:
i = 0
zxlym = yuefen[ (i-3) % 12]
i += 1
if i == 13:
zxlym = "后九月"
if zr == True:
j -= 1
ce = -722 + (j-1)//12
yln = -722 + j // 12
if (j-11) % 12 < 1: yln += 1
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+(j+1)//12)%76+1,"闰" + yuefen[(j-2) % 12] + dxy(yxy_0),zxlym,gz[(ydy_0)%60], (ydy_0-bsgz[rbs%20]) % 60,yxy_0, "无中气",'','','','',"闰" + yuefen[(j-2)%12] + dxy(yxy_0)]
hlb=[ce, gz[(-ly+yln+lygz)%60],"闰" + yuefen[(j-2) % 12] + dxy(yxy_0),zxlym,"无中气",'',jq,jqgz,'']
#print((yln-jjly+1)%76,"闰" + yuefen[(j-2) % 12])
else:
ce = -722 + (j-1)//12
yln = -722 + j // 12
if (j-11) % 12 < 1: yln += 1
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+(j+1)//12)%76+1,yuefen[(j-2) % 12] + dxy(yxy_0), zxlym,gz[(ydy_0)%60],(ydy_0-bsgz[rbs%20]) % 60,yxy_0,jieqi[j%12*2], gz[(zqdy_0)%60],(zqdy_0-bsgz[rbs%20])%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30]]
hlb=[ce, gz[(-ly+yln+lygz)%60],yuefen[(j-2) % 12] + dxy(yxy_0),zxlym,jieqi[j%12*2], gz[zqdy_0%60],jq,jqgz,'']
yueri_0 = yueri
for k in range(yueri_0):
zxlb.append(gz[(ydy_0+k) % 60])
if (j+1) % 12 == 0 and j != -1 and zr == False:
zxlsrb.write('\n')
zxllb.write('\n')
j += 1
zxlsrb.write(','.join('%s' % id for id in srb) + '\n')
zxllb.write(','.join('%s' % id for id in hlb+zxlb) + '\n')
zxlb.clear()
夏历朔闰表及历表(正月建寅,历元天正甲子冬至合朔)
from wangnian import *
from sfs import *
zqdy_0 = 58 - zqdy
zqxy_0 = 16 - zqxy
ydy_0 = 46 - ydy
yxy_0 = 62 - yxy
ly = -1076
lygz = 1
xlb = []
j = 0
x = 0
y = 0
jqcx = 1
yln = -723
yry = 89
ry = 1
xlsrb = open("夏历朔闰表(历元冬至).csv",'w')
xllb = open("夏历历表(历元冬至).csv",'w')
jqdy_0,jqxy_0 = qy(zqdy_0,zqxy_0,zqrf,zqdy//2,zqxy//2)
header = ["公元纪年","干支纪年","蔀名","入蔀年","月份","朔日干支","朔日大余","朔日小余","中气","中气干支","中气大余","中气小余","中气日期","年中置闰","年终置闰"]
xlsrb.write(','.join(header)+'\n')
header2 = ["公元纪年","干支纪年","月份","中气","中气干支","节气","节气干支",'']
xllb.write(','.join(header2+nlrq)+'\n')
while yln < -103:
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, ydy, yxy)
zr,zqdy_0,zqxy_0 = wzqy(zqdy_0,zqxy_0,ydy_0,yxy_0)
wjq, jqdy_0, jqxy_0 = wzqy(jqdy_0, jqxy_0, ydy_0,yxy_0)
#节气
if wjq == True:
jq = "无节气"
jqgz = "\t"
else:
jq = jieqi[(jqcx) % 24]
jqgz = gz[jqdy_0 % 60]
jqcx += 2
#年终置闰
if j % 12 == 0 and zr == False:
ry += 7
x = 0
y = 0
if ry >= 19:
ry -= 19
x += 1
y += 1
month = yuefen[ (x-3) % 12]
if ry >= 12:
if x == 3:
month = "闰十二月(" + str(gz[(-ly+yln+lygz)%60]) + ')'
elif x > 3:
month = yuefen[(x - 4) % 12]
#年中置闰
nzzr = yuefen[ (y-3) % 12]
if yry + 7 >= 228:
y -= 1
nzzr = '闰'+yuefen[(y-3)%12]
yry -= 228
else:
yry += 7
# 历表
if zr == True:
j -= 1
yln = -722 + j // 12
ce = -722 + (j - 1) // 12
if j % 12 < 2: yln -= 1
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+(j-2)//12)%76+1,"闰" + yuefen[(j-2) % 12] + dxy(yxy_0),gz[ydy_0%60], (ydy_0-bsgz[rbs%20]) % 60,yxy_0, "无中气",'','','','',nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],"闰" + yuefen[(j-2) % 12] + dxy(yxy_0),"无中气",'',jq,jqgz,'']
else:
yln = -722 + j // 12
ce = -722 + (j - 1) // 12
if j % 12 < 2: yln -= 1
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+(j-2)//12)%76+1,yuefen[(j-2) % 12] + dxy(yxy_0), gz[ydy_0%60],(ydy_0-bsgz[rbs%20]) % 60,yxy_0,jieqi[j%12*2], gz[zqdy_0%60],(zqdy_0-bsgz[rbs%20])%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30],nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],yuefen[(j-2) % 12] + dxy(yxy_0),jieqi[j%12*2], gz[zqdy_0%60],jq,jqgz,'']
yueri_0 = yueri
for k in range(yueri_0):
xlb.append(gz[(ydy_0+k) % 60])
if (j-2) % 12 == 0 and j != 0 and zr == False:
xlsrb.write('\n')
xllb.write('\n')
j += 1
xlsrb.write(','.join('%s' % id for id in srb) + '\n')
xllb.write(','.join('%s' % id for id in hlb+xlb) + '\n')
xlb.clear()
夏历朔闰表及历表(正月建寅,历元人正甲子雨水合朔)
from wangnian import *
from sfs import *
zqdy_0 = 58 - zqdy
zqxy_0 = 16 - zqxy
ydy_0 = 46 - ydy
yxy_0 = 62 - yxy
ly = -1076
jjly = ly+76*4
lygz = 1
lybsgz = bsgz[((-ly+jjly)//76)%20]
xlb = []
j = 0
x = 10
y = 10
ry = 1
yry = 75
jqcx = 1
yln = -722
xlsrb = open("夏历朔闰表(历元雨水).csv",'w')
xllb = open("夏历历表(历元雨水).csv",'w')
#将历元雨水调为历元冬至
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, 2*-ydy, 2*-yxy)
zqdy_0,zqxy_0 = qy(zqdy_0,zqxy_0,zqrf,2*-zqdy,2*-zqxy)
jqdy_0,jqxy_0 = qy(zqdy_0,zqxy_0,zqrf,zqdy//2,zqxy//2)
header = ["公元纪年","干支纪年","蔀名","入蔀年","月份","朔日干支","朔日大余","朔日小余","中气","中气干支","中气大余","中气小余","中气日期","年中置闰","年终置闰"]
xlsrb.write(','.join(header)+'\n')
header2 = ["公元纪年","干支纪年","月份","中气","中气干支","节气","节气干支",'']
xllb.write(','.join(header2+nlrq)+'\n')
while yln < -103:
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, ydy, yxy)
zr,zqdy_0,zqxy_0 = wzqy(zqdy_0,zqxy_0,ydy_0,yxy_0)
wjq, jqdy_0, jqxy_0 = wzqy(jqdy_0, jqxy_0, ydy_0,yxy_0)
#节气
if wjq == True:
jq = "无节气"
jqgz = "\t"
else:
jq = jieqi[jqcx % 24]
jqgz = gz[jqdy_0 % 60]
jqcx += 2
#年终置闰
if j % 12 == 2 and zr == False:
ry += 7
x = 0
y = 0
if ry >= 19:
ry -= 19
x += 1
y += 1
month = yuefen[(x-1) % 12]
if ry >=12:
if (-ly-722+(j-2)//12)%76 in [10,19,37,57,0]:
if x == 13:
month = "闰十二月(" + str(gz[(-ly + yln + lygz) % 60]) + ')'
elif x == 1 and yry >=149:
month = "闰十二月(" + str(gz[(-ly + yln + lygz) % 60]) + ')'
elif x > 1 :
month = yuefen[(x - 2) % 12]
#年中置闰
nzzr = yuefen[ (y-1) % 12]
if yry + 7 >= 228:
y -= 1
nzzr = '闰'+yuefen[(y-1)%12]
yry -= 228
else:
yry += 7
#历表
if zr == True:
j -= 1
yln = -722 + j // 12
ce = -722 + (j - 1) // 12
if j % 12 < 2: yln -= 1
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+(j-2)//12)%76+1,"闰" + yuefen[(j-2) % 12] + dxy(yxy_0),gz[ydy_0%60], (ydy_0-bsgz[rbs%20]) % 60,yxy_0, "无中气",'','','','',nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],"闰" + yuefen[(j-2) % 12] + dxy(yxy_0),"无中气",'',jq,jqgz,'']
else:
yln = -722 + j // 12
ce = -722 + (j - 1) // 12
if j % 12 < 2: yln -= 1
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+(j-2)//12)%76+1,yuefen[(j-2) % 12] + dxy(yxy_0), gz[ydy_0%60],(ydy_0-bsgz[rbs%20]) % 60,yxy_0,jieqi[j%12*2], gz[zqdy_0%60],(zqdy_0-bsgz[rbs%20])%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30],nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],yuefen[(j-2) % 12] + dxy(yxy_0),jieqi[j%12*2], gz[zqdy_0%60],jq,jqgz,'']
yueri_0 = yueri
for k in range(yueri_0):
xlb.append(gz[(ydy_0+k) % 60])
if (j-2) % 12 == 0 and j != 0 and zr == False:
xlsrb.write('\n')
xllb.write('\n')
j += 1
xlsrb.write(','.join('%s' % id for id in srb) + '\n')
xllb.write(','.join('%s' % id for id in hlb+xlb) + '\n')
xlb.clear()
殷历朔闰表及历表(正月建子,历元天正甲子冬至合朔)
from wangnian import *
from sfs import *
zqdy_0 = 56 - zqdy
zqxy_0 = 8 - zqxy
ydy_0 = 46 - ydy
yxy_0 = 869 - yxy
ly = -1567
lygz = 50
ylb = []
j = 0
x = 0
y = 0
yry = 65
yln = -722
ry = 18
jqcx = 1
ylsrb = open("殷历朔闰表.csv",'w')
yllb = open("殷历历表.csv",'w')
jqdy_0,jqxy_0 = qy(zqdy_0,zqxy_0,zqrf,zqdy//2,zqxy//2)
header = ["公元纪年","王年","干支纪年","蔀名","入蔀年","月份","朔日干支","朔日大余","朔日小余","中气","中气干支","中气大余","中气小余","中气日期","年中置闰","年终置闰"]
ylsrb.write(','.join(header)+'\n')
header2 = ["公元纪年","干支纪年","月份","中气","中气干支","节气","节气干支",'']
yllb.write(','.join(header2+nlrq)+'\n')
while yln < -103 :#BC427-BC222(235月*10章+16年*12月+5闰)2547
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, ydy, yxy)
zr,zqdy_0,zqxy_0 = wzqy(zqdy_0,zqxy_0,ydy_0,yxy_0)
wjq,jqdy_0,jqxy_0 = wzqy(jqdy_0,jqxy_0,ydy_0,yxy_0)
#节气
if wjq == True:
jq = "无节气"
jqgz = "\t"
else:
jq = jieqi[(jqcx) % 24]
jqgz = gz[jqdy_0 % 60]
jqcx += 2
#年终置闰
if j % 12 == 0 and zr == False:
ry += 7
x = 0
y = 0
if ry >= 19:
ry -= 19
month = yuefen[ x % 12]
x += 1
y += 1
if x == 13:
month = "闰十二月"
#年中置闰
nzzr = yuefen[ (y-1) % 12]
if yry + 7 >= 228:
y -= 1
nzzr = '闰'+yuefen[(y-1)%12]
yry -= 228
else:
yry += 7
# 历表
if zr == True:
j -= 1
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,"闰" + yuefen[j % 12] + dxy(yxy_0),gz[ydy_0%60], (ydy_0-bsgz[rbs%20]) % 60,yxy_0, "无中气",'','','','',nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],"闰" + yuefen[j % 12] + dxy(yxy_0),"无中气",'',jq,jqgz,'']
else:
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,yuefen[j % 12] + dxy(yxy_0), gz[ydy_0%60],(ydy_0-bsgz[rbs%20]) % 60,yxy_0,jieqi[j%12*2], gz[zqdy_0%60],(zqdy_0-bsgz[rbs%20])%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30],nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],yuefen[j % 12] + dxy(yxy_0),jieqi[j%12*2], gz[zqdy_0%60],jq,jqgz,'']
yueri_0 = yueri
for k in range(yueri_0):
ylb.append(gz[(ydy_0+k) % 60])
if j%12==0 and j!=0 and zr == False:
ylsrb.write('\n')
yllb.write('\n')
j += 1
ylsrb.write(','.join('%s' % id for id in srb) + '\n')
yllb.write(','.join('%s' % id for id in hlb+ylb) + '\n')
ylb.clear()
周历朔闰表及历表(正月建子,历元天正甲子冬至合朔)
from wangnian import *
from sfs import *
zqdy_0 = 55 - zqdy
zqxy_0 = 16 - zqxy
ydy_0 = 46 - ydy
yxy_0 = 164 - yxy
ly = -1624
lygz = 53
zlb = []
j = 0
x = 0
y = 0
yln = -722
ry = 18
yry = 65
jqcx = 1
zlsrb = open("周历朔闰表.csv",'w')
zllb = open("周历历表.csv",'w')
jqdy_0,jqxy_0 = qy(zqdy_0,zqxy_0,zqrf,zqdy//2,zqxy//2)
header = ["公元纪年","干支纪年","蔀名","入蔀年","月份","朔日干支","朔日大余","朔日小余","中气","中气干支","中气大余","中气小余","中气日期","年中置闰","年终置闰"]
zlsrb.write(','.join(header)+'\n')
header2 = ["公元纪年","干支纪年","月份","中气","中气干支","节气","节气干支",'']
zllb.write(','.join(header2+nlrq)+'\n')
while yln < -103:
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, ydy, yxy)
zr, zqdy_0, zqxy_0 = wzqy(zqdy_0, zqxy_0, ydy_0,yxy_0)
wjq, jqdy_0, jqxy_0 = wzqy(jqdy_0, jqxy_0, ydy_0,yxy_0)
#节气
if wjq == True:
jq = "无节气"
jqgz = "\t"
else:
jq = jieqi[(jqcx) % 24]
jqgz = gz[jqdy_0 % 60]
jqcx += 2
#年终置闰
if j % 12 == 0 and zr == False:
ry += 7
x = 0
y = 0
if ry >= 19:
ry -= 19
month = yuefen[ x % 12]
x += 1
y += 1
if x == 13:
month = "闰十二月"
#年中置闰
nzzr = yuefen[ (y-1) % 12]
if yry + 7 >= 228:
y -= 1
nzzr = '闰'+yuefen[(y-1)%12]
yry -= 228
else:
yry += 7
# 历表
if zr == True:
j -= 1
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,"闰" + yuefen[j % 12] + dxy(yxy_0),gz[ydy_0%60], (ydy_0-bsgz[rbs%20]) % 60,yxy_0, "无中气",'','','','',nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],"闰" + yuefen[j % 12] + dxy(yxy_0),"无中气",'',jq,jqgz,'']
else:
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,yuefen[j % 12] + dxy(yxy_0), gz[ydy_0%60],(ydy_0-bsgz[rbs%20]) % 60,yxy_0,jieqi[j%12*2], gz[zqdy_0%60],(zqdy_0-bsgz[rbs%20])%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30],nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],yuefen[j % 12] + dxy(yxy_0),jieqi[j%12*2], gz[zqdy_0%60],jq,jqgz,'']
yueri_0 = yueri
for k in range(yueri_0):
zlb.append(gz[(ydy_0+k) % 60])
if j % 12 == 0 and j != 0 and zr == False:
zlsrb.write('\n')
zllb.write('\n')
j += 1
zlsrb.write(','.join('%s' % id for id in srb) + '\n')
zllb.write(','.join('%s' % id for id in hlb+zlb) + '\n')
zlb.clear()
鲁历朔闰表(正月建子,历元天正甲子冬至合朔,蔀首闰余为1)
from wangnian import *
from sfs import *
zqdy_0 = 54 - zqdy
zqxy_0 = 24 - zqxy
ydy_0 = 46 - ydy
yxy = 499 #每月小余499
yxy_0 = 920 - yxy
ly = -2001
lygz = 36
llb = []
j = 0
yln = -722
ry = 17
yry = 53
x = 0
y = 0
jqcx = 1
llsrb = open("鲁历朔闰表.csv",'w')
lllb = open("鲁历历表.csv",'w')
jqdy_0,jqxy_0 = qy(zqdy_0,zqxy_0,zqrf,zqdy//2,zqxy//2)
header = ["公元纪年","干支纪年","蔀名","入蔀年","月份","朔日干支","朔日大余","朔日小余","中气","中气干支","中气大余","中气小余","中气日期","年中置闰","年终置闰"]
llsrb.write(','.join(header)+'\n')
header2 = ["公元纪年","干支纪年","月份","中气","中气干支","节气","节气干支",'']
lllb.write(','.join(header2+nlrq)+'\n')
while yln < -103:#BC427-BC222(235月*10章+16年*12月+5闰)2547
ydy_0, yxy_0 = qy(ydy_0, yxy_0, sdrf, ydy, yxy)
zr,zqdy_0,zqxy_0 = wzqy(zqdy_0,zqxy_0,ydy_0,yxy_0)
wjq,jqdy_0,jqxy_0 = wzqy(jqdy_0,jqxy_0,ydy_0,yxy_0)
#节气
if wjq == True:
jq = "无节气"
jqgz = "\t"
else:
jq = jieqi[(jqcx) % 24]
jqgz = gz[jqdy_0 % 60]
jqcx += 2
#年终置闰
if j % 12 == 0 and zr == False:
ry += 7
x = 0
y = 0
if ry >= 19:
ry -= 19
month = yuefen[ x % 12]
x += 1
y += 1
if x == 13:
month = "闰十二月"
#年中置闰
nzzr = yuefen[ (y-1) % 12]
if yry + 7 >= 228:
y -= 1
nzzr = '闰'+yuefen[(y-1)%12]
yry -= 228
else:
yry += 7
#历表
if zr == True:
j -= 1
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,"闰" + yuefen[j% 12] + dxy(yxy_0),gz[ydy_0%60], (ydy_0-bsgz[rbs%20]) % 60,yxy_0, "无中气",'','','','',nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],"闰" + yuefen[j % 12] + dxy(yxy_0),"无中气",'',jq,jqgz,'']
else:
yln = -722 + j // 12
ce = -722 + (j-1) // 12
rbs = (-ly + yln) // 76
srb =[ce, gz[(-ly+yln+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,yuefen[j % 12] + dxy(yxy_0), gz[ydy_0%60],(ydy_0-bsgz[rbs%20]) % 60,yxy_0,jieqi[j%12*2], gz[zqdy_0%60],(zqdy_0-bsgz[rbs%20])%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30],nzzr,month]
hlb=[ce, gz[(-ly+yln+lygz)%60],yuefen[j % 12] + dxy(yxy_0),jieqi[j%12*2], gz[zqdy_0%60],jq,jqgz,'']
yueri_0 = yueri
for k in range(yueri_0):
llb.append(gz[(ydy_0+k) % 60])
if j%12==0 and j!=0 and zr == False:
llsrb.write('\n')
lllb.write('\n')
j += 1
llsrb.write(','.join('%s' % id for id in srb) + '\n')
lllb.write(','.join('%s' % id for id in hlb+llb) + '\n')
llb.clear()