TGDZ Calc 的仓颉语言实现
仓颉语言是华为开发的一门新语言,初步学习的感觉是有点像C++,同时语法上又比较优雅一点,有点像kotlin. 用的是Windows版本,在CodeArts中调试写出来的。
点击查看代码
package TGDZcalc
func CalcBaseYear(year: Int64): Int64 {
if (year == 0) {
return 0
}
var base = if (year > 0) {
1984
} else {
-57
}
while (base > year) {
base -= 60
}
while (base <= (year - 60)) {
base += 60
}
return base
}
func TGDZtoYear(tgdz: String, baseYear: Int64): Int64 {
if (tgdz.size != 6) {
return 0
}
let myArr = tgdz.toRuneArray(); //toArray会生成字节系列,不是本意.
let tg = myArr[0];
let dz = myArr[1];
let tgArr = [r'甲', r'乙', r'丙', r'丁', r'戊', r'己', r'庚', r'辛', r'壬', r'癸']; //加r表示一个字符,不是字串
let dzArr = [r'子', r'丑', r'寅', r'卯', r'辰', r'巳', r'午', r'未', r'申', r'酉', r'戌', r'亥'];
var ti = 0;
var di = 0;
//这个for in 循环比较奇怪,不包括后面的界,即0..10表示的是[0,10)
for (i in 0..10) {
if (tgArr[i] == tg) {
ti = i
break;
}
}
//同上,end界要表示为12.(这也比较符合习惯,即集合的大小 放在后界,但索引不会过界)
for (i in 0..12) {
if (dzArr[i] == dz) {
di = i
break;
}
}
var m = ti - di;
if (m < 0) {
m += 12
}
return baseYear + 5 * m + ti;
}
func YearToTGDZ(CurYear: Int64): String {
let tgArr = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
let dzArr = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
var year = CurYear
if (year == 0) {
return "Error: year=0 "
}
year -= if (year < 0) {
3
} else {
4
}
while (year < 0) {
year += 60
}
var z1 = year % 10
var z2 = year % 12
let tg = tgArr[z1]
let dz = dzArr[z2]
return "${tg}${dz}";
}
main() {
for (i in 1900..2101) {
let bY = CalcBaseYear(i); //计算甲子元年
let tgdz = YearToTGDZ(i); //计算当年的天干地支
let reCalcedYear = TGDZtoYear(tgdz, bY);
println("Year: ${i} 干支记年是${tgdz}, 甲子元年${bY}, 再算回来为 ${reCalcedYear}年.")
}
println("please wait here"); //加断点让它运行到这里暂停一下
}
//2025-5-23 在 仓颉 0.53.18 with CodeArts IDE中调试通过。


浙公网安备 33010602011771号