dz var t = int((TG.find(tg)+1)/3) #因为应该是除3而不是除2(Unicode汉字按UTF8编码后为3字节一个汉字) var d = int((DZ.find(dz)+1)/3) # echo t。
,\t 再计算为年份: , proc dayofweek(year:int,在VS code搭配nim 2.2.0 调试 通过 代码与编译后的程序如下 。
。
recY # 2025-1-11 nim语言有点像Python那样优雅排版,\t 干支记年: 。
for n in 1900..2100: var s=tgdz(n) var bY=CalcBaseYear(n) var recY=TGDZtoYear(s。
s 。
n。
适用于1582年10月15日之后的星期几计算(格里高利历) var y:int=year var m:int=month let EarlyLimit = 1582*365+10*30+15 let curValue =y*365+m*30+day if curValueEarlyLimit: return -1; if (m==1) or (m==2): y-=1 m+=12 var fy:float=float(y) var fm:float=float(m) var fday:float=float(day) var z:float=0.0 z=fy+fy/4-fy/100+fy/400+(fm*13+8)/5 + fday return int(z) mod 7; proc CalcBaseYear(year: int): int = if year == 0: return 0 var base = 0 if year 0: base = 1984 else: base = -57 while base year: base -= 60 while (base = year) and ((year - base) = 60): base += 60 return base proc TGDZtoYear(tgdz: string, day:int):int = # Zeller公式,bY) echo Year: , bY,imToken钱包, d var m:int = t - d if m 0: m += 12 return baseYear + m * 5 + t proc tgdz(year: int): string= if year == 0: return Error: year=0 var y=0 if year 0: y=year-3 else: y=year-4 var z1 = y mod 10 var z2 = y mod 12 if z1 0: z1 += 10 if z2 0: z2 += 12 let TG:string=甲乙丙丁戊己庚辛壬癸 let DZ:string=子丑寅卯辰巳午未申酉戌亥 return TG[z1*3..z1*3+2] DZ[z2*3..z2*3 + 2] #直接按UTF8编码后的字节来提取, baseYear: int): int = let TG:string=甲乙丙丁戊己庚辛壬癸 let DZ:string=子丑寅卯辰巳午未申酉戌亥 if (tgdz.len != 6): #如果不是两个汉字(按UTF8编码得6个字节) return 0 let tg =tgdz[0..2] #天干 let dz =tgdz[3..5] #地支 # echo tg,使用还算方便。
month:int。
,\t 甲子元年: ,imToken下载,。