TGDZcalc by Groovy5 (41th)
今晚简单研究了一下Groovy语言,这也是一个用Java开发的语言,语法上有点像C++,感觉比较熟稔.
Groovy 是一种基于 Java 平台 的动态编程语言,语法与 Java 高度兼容,并提供了更简洁的语法和额外功能。groovy脚本可以通过 Groovy 解释器(groovysh)直接运行,也可以编译成 Java 字节码在 JVM 上执行。
用它实现TGDZcalc也很简单.不过groovysh终端对汉字的显示支持不太好,但文本函数运行是正常的,一个汉字也当成一个字符在处理.
点击查看Groovy代码
static int CalcBaseYear(int year) {
int b=0; if (year>0){b=4} else {b= -57};
while (b>year) {b=b-60;}; while(b+60<= year) {b=b+60};return b;}
static String YearToTGDZ(int year) {
String strTG="甲乙丙丁戊已庚辛壬癸";
String strDZ="子丑寅卯辰巳午未申酉戌亥";
if(year==0) {return ""};
int tmpY=year;
if (tmpY>0) {tmpY = tmpY-4} else {tmpY = tmpY-3};
while(tmpY<0) {tmpY = tmpY + 60};
int ti=tmpY % 10;
int di = tmpY % 12;
String t=strTG.substring(ti, ti+1);
String d=strDZ.substring(di,di+1);
return t+d;
}
static int TGDZtoYear(String tgdz, int baseYear) {
if(tgdz.length()==0) {return 0};
String tg=tgdz.substring(0, 1);
String dz=tgdz.substring(1, 2);
String strTG="甲乙丙丁戊已庚辛壬癸";
String strDZ="子丑寅卯辰巳午未申酉戌亥";
int ti=strTG.indexOf(tg);
int di=strDZ.indexOf(dz);
int m=0;
if (ti>=di) {m=ti-di} else {m=12+ti-di};
return baseYear+m*5+ti;
}
static void Test(int x){
int by=CalcBaseYear(x);
String s=YearToTGDZ(x);
println("year " + x +": TGDZ= "+s + ", BaseYear=" + by + ",ReCalcBack=" +TGDZtoYear(s, by));
}
static void main(){ def years=[-361,1900,1924,1936,1976,2026]; for (y in years) {Test(y);} }
运行结果如下

与scala语法有点差异,变量的声明语法,for循环的语法都不一样.
终端对中文的显示有点问题,从上面截图可以看出来,汉字串没有显示完整.

浙公网安备 33010602011771号