古六历朔闰表及历表(BC722-BC104)

对于公元纪年、干支纪年、王公纪年、正月、蔀首等,凡年皆以岁首为分界,与建正无关。

公元纪年:公元前以负号表示,而不使用“公元前”或“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()

猜你喜欢

转载自blog.csdn.net/weixin_42763614/article/details/82791537
BC3