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 突然损坏,拆开后找不出原因只好报废。是为记。`

运行结果截图:

posted @ 2025-05-19 11:52  dingxianghuan  阅读(15)  评论(0)    收藏  举报