TGDZCalc by Scala(40th)

今日甚闲,研究了一下Scala来表达TGDZcalc, 这是一个基于Java开发但语法更简单更灵活的改进. 也不难上手.

点击查看scala代码
object TGDZcalc {
def CalcBaseYear(year:Int):Int={var b:Int=0; if (year>0){b=4} else {b= -57};
  while (b>year) {b=b-60;}; while(b+60<= year) {b=b+60}; b}
def YearToTGDZ(y:Int):String={ var strTG:String="甲乙丙丁戊已庚辛壬癸"; 
 var strDZ:String="子丑寅卯辰巳午未申酉戌亥"; if(y==0) {return ""};
 var tmpY:Int=y; if (tmpY>0) {tmpY = tmpY-4} else {tmpY = tmpY-3};
  while(tmpY<0) {tmpY = tmpY + 60};  var ti:Int=tmpY % 10;
    var di:Int = tmpY % 12;var t:String=strTG.substring(ti, ti+1);
    var d:String=strDZ.substring(di,di+1);return t+d;}
def TGDZtoYear(tgdz:String, baseYear:Int):Int = {if(tgdz.length==0) {return 0};
var tg:String=tgdz.substring(0, 1);var dz:String=tgdz.substring(1, 2);
val strTG="甲乙丙丁戊已庚辛壬癸";val strDZ="子丑寅卯辰巳午未申酉戌亥";
var ti:Int=strTG.indexOf(tg);var di:Int=strDZ.indexOf(dz);var  m:Int=0;
if (ti>=di) {m=ti-di} else {m=12+ti-di};return baseYear+m*5+ti; }
def Test(x:Int)={var by:Int=CalcBaseYear(x);var s:String=YearToTGDZ(x);
printf("%d  %s  %d  %d\n",x,s,by,TGDZtoYear(s, by));
}
def RunIt()={Test(-361);Test(1900);Test(1924);
Test(1936);Test(1976);Test(2026);}
}

运行后结果如图:

结果

posted @ 2026-02-25 20:02  dingxianghuan  阅读(0)  评论(0)    收藏  举报