TGDZ Calc 新增 Kotlin语言
新学了一点Kotlin, 它的语法与Java类似。 继续用它写一下天干地支的转换程序。利用IDEA自动转换Java代码而得。
点击查看代码
//Zeller公式,适用于1582年10月15日之后的星期几计算(格里高利历)
fun dayofweek(year:Int, month:Int, day:Int):Int
{
//Zeller公式,适用于1582年10月15日之后的星期几计算(格里高利历)
var y:Int=year;
var m:Int=month;
val EarlyLimit:Int = 1582*365+10*30+15;
val curValue: Int =y*365+m*30+day;
if (curValue<EarlyLimit) return -1;
if (m==1 || m==2) {
y-=1;
m +=12;
}
return (y+y/4 -y/100 + y/400 +(13*m+8)/5 + day)%7;
}
val TG:String = "甲乙丙丁戊己庚辛壬癸";
val DZ:String = "子丑寅卯辰巳午未申酉戌亥";
fun CalcBaseYear(year: Int): Int {
if (year == 0) return 0
var base = if (year > 0) { 1984 } else { -57 }
while (base > year) { base -= 60 }
while ((base <= year) && ((year - base) >= 60)) { base += 60 }
return base
}
fun TGDZtoYear(tgdz: String, baseYear: Int): Int {
if (tgdz.length == 0) return 0
val tg = tgdz[0]
val dz = tgdz[1]
val t = TG.indexOf(tg)
val d = DZ.indexOf(dz)
var m = t - d
if (m < 0) { m += 12 }
return baseYear + m * 5 + t
}
fun tgdz(year: Int): String {
var year = year
if (year == 0) {return "Error: year=0 " }
year -= if (year < 0) {3} else {4 }
var z1 = year % 10
var z2 = year % 12
if (z1 < 0) { z1 += 10 }
if (z2 < 0) { z2 += 12 }
return TG.substring(z1, z1 + 1) + DZ.substring(z2, z2 + 1)
}
fun main() {
for ( i in 1900..2100 ) {
val s:String=tgdz(i);
val bY:Int=CalcBaseYear(i);
val recY:Int=TGDZtoYear(s,bY);
println("Year: " + i +"\t 干支记年: " +s +"\t 甲子元年: " + bY + ",\t 再计算为年份: " +recY);
}
}
//2025-1-5 在 IDEA中测试通过。敲完今天这点文字,键盘Vermilo VA87M 突然损坏,拆开后找不出原因只好报废。是为记。`
运行结果截图:


浙公网安备 33010602011771号