古六歷朔閏表及歷表(BC722-BC104)
阿新 • • 發佈:2018-12-11
黃帝歷朔閏表及歷表(正月建子,曆元天正冬至合朔)
tiangan = ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] dizhi = ["子","醜","寅","卯","辰","巳","午","未","申","酉","戌","亥"] 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 zqdy_0 = 51 - zqdy zqxy = 14 zqxy_0 = 0 - zqxy ydy = int(yue) ydy_0 = 40 - ydy yxy = 499 #每月小余499 yxy_0 = 113 - yxy yueri_0 = -29 zqrq = -2 ly = -1350 lygz = 27 hdlb = [] yuefen =["正月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"] jieqi = ["冬至","小寒","大寒","立春","雨水","驚蟄","春分","清明","穀雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露","秋分","寒露","霜降","立冬","小雪","大雪"] nlrq=["初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二一","二二","二三","二四","二五","二六","二七","二八","二九","三十"] j = 0 ce = -722 hdlsrb = open("黃帝歷朔閏表.csv",'w') hdllb = open("黃帝歷歷表.csv",'w') 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): #無中氣月(氣大小余、朔大餘、干支序) global zqdy_0,zqxy_0,yueri_0,yueri if dxy(yxy_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 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') for i in range(10000):#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) wjq, jqdy_0, jqxy_0 = wzqy(jqdy_0, jqxy_0, ydy_0) rbs = (-ly + ce) // 76 jq = jieqi[(j * 2 - 1) % 24] jqgz = gz[(bsgz[rbs % 20] + jqdy_0) % 60] if wjq == True: jq = "無節氣" jqgz = "\t" if zr == True: ce = -722 + j // 12 if j % 12 < 0: ce -= 1 j -= 1 srb =[ce, gz[(-ly+ce+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,"閏" + yuefen[j % 12] + dxy(yxy_0),gz[(bsgz[rbs%20]+ydy_0)%60], ydy_0 % 60,yxy_0, "無中氣",'','','',''] hlb=[ce, gz[(-ly+ce+lygz)%60],"閏" + yuefen[j % 12] + dxy(yxy_0),"無中氣",'',jq,jqgz,''] else: ce = -722 + j // 12 if j % 12 < 0: ce -= 1 srb =[ce, gz[(-ly+ce+lygz)%60],gz[bsgz[rbs%20]],(-ly-722+j//12)%76+1,yuefen[j % 12] + dxy(yxy_0), gz[(bsgz[rbs%20]+ydy_0)%60],ydy_0 % 60,yxy_0,jieqi[j%12*2], gz[(bsgz[rbs%20]+zqdy_0)%60],zqdy_0%60,zqxy_0,nlrq[(zqdy_0-ydy_0)%30]] hlb=[ce, gz[(-ly+ce+lygz)%60],yuefen[j % 12] + dxy(yxy_0),jieqi[j%12*2], gz[(bsgz[rbs%20]+zqdy_0)%60],jq,jqgz,''] yueri_0 = yueri for k in range(yueri_0): hdlb.append(gz[(bsgz[rbs%20]+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()