TGDZCalc 实现 by D语言
对D语言有点好奇,花了点时间学习了一下,但不太顺利,vscode没有搞好调试环境,只能运行。
为了在控制台输入正确的中文字符,需要安装并编译excode模块。 并且用mdm xxx.d通不过,只在rdmd 下运行通过。
先搞到这里,已经有32种语言实现,暂时不想再折腾这玩意了。
点击查看代码
module test;
import std.stdio;
import std.string;
import exCode;
wchar[] YearToTGDZ(int year)
{
wchar[] TG =['甲','乙','丙','丁','戊','已','庚','辛','壬','癸']; //string TG="甲乙丙丁戊已庚辛壬癸" ;
wchar[] DZ = ['子','丑','寅','卯','辰','已','午','未','申','酉','戌','亥']; //string DZ = "子丑寅卯辰已午未申酉戌亥";
if (year==0)
{return ['0','0'];}
year-= (year<0)? 3:4;
while (year<0) {year +=60;};
int z1= year % 10; int z2=year %12;
wchar[] tgdzArr=[TG[z1],DZ[z2]];
return tgdzArr; //
}
int GetBaseYear(const int year)
{
int base =(year>0)? 1984:-57;
while (base>year) {base -=60;}
while((base + 60) <=year){base +=60;}
return base;
}
int TGDZToYear(wchar[] tgdz, int baseYear)
{
assert(tgdz.length==2,"输入的天干地支长度错误:不是2");
wchar s1=tgdz[0];
wchar s2=tgdz[1];
wchar[] TG =['甲','乙','丙','丁','戊','已','庚','辛','壬','癸'];
wchar[] DZ = ['子','丑','寅','卯','辰','已','午','未','申','酉','戌','亥'];
int t, d;
for(int i=0;i<10;i++)
{
if (TG[i]==s1) {t=i; break;}
}
for(int i=0;i<12;i++)
{
if (DZ[i]==s2) {d=i; break;}
}
int m =(t-d>=0)?(t-d):(t-d+12);
return baseYear + m*5 + t;
}
int main()
{
for (int i=1900; i<=2100; i++)
{
int bY=GetBaseYear(i);
wchar[] tgdz=YearToTGDZ(i);
string gzCnv=UNI2GBK(tgdz); //为了让中文字符在控制台正确输出,必须进行转换。为此需要用到excode库。
int year=TGDZToYear(tgdz,bY);
writeln(i," -- ",gzCnv, " baseYear: ",bY, " convert back to ",year);
}
return 0;
}
//为了显示中文不乱码搞了好久,最后在vs code中通过RDMD运行成功。2025-5-29


浙公网安备 33010602011771号