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);}	}	

运行结果如下

Groovy脚本运行结果

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

posted @ 2026-02-27 01:05  dingxianghuan  阅读(1)  评论(0)    收藏  举报