干支纪日从商朝便已开始,但其顺序到现在有无间断或错乱过,尚待考证。目前已确切知道的从春秋鲁隐公三年(公元前720年)二月己巳日起到清宣统三年(公元1911年)止(1912年民国元年采用公元纪年后,民间仍沿用)2600多年中从未间断和错乱过。 干支纪日法是商朝历法的最大成就,这是现今已知世界最长的纪日法,对于我国历史学,尤其是科学技术发展史的考证和研究,都是极为重要的记时标志,是我国一份珍贵的科学文化遗……
#这是我跟据网上资料用shell脚本语言写的一个输出现在的天干地支 日 的程序,如有不对的地方还请大家给于帮助。
#!/bin/bash
runnian=$(( $(date +%Y) % 4 ))
#判断今年是闰年还是平年,如果除尽就是闰年,否则就是平年。
case $runnian in
0)
a=$(( $(( $(( $(date +%y) + 100 )) / 4 )) % 10 ))
#计算闰年元旦天干数。2000年以后,结果对应下面的选项。。
b=$(( $(( $(( $(( $(date +%y) + 100 )) / 4 )) % 4 )) ))
##计算闰年元旦天干数。2000年以后,结果对应下面的选项。
#o=天干数 p=地支数
#计算当年当年元旦 地支
case $a in
1)
t="甲"
o=1
;;
2)
t="乙"
o=2
;;
3)
t="丙"
o=3
;;
4)
t="丁"
o=4
;;
5)
t="戊"
o=5
;;
6)
t="已"
o=6
;;
7)
t="庚"
o=7
;;
8)
t="辛"
o=8
;;
9)
t="壬"
o=9
;;
10)
t="癸"
o=10
esac
#计算闰年元旦地支数。2000年以后,结果对应下面的选项。元旦地支与天干不同,他只有这四个结果。
case $b in
1)
d="午"
p=7
;;
2)
d="卯"
p=4
;;
3)
d="子"
p=1
;;
0)
d="酉"
p=10
esac
runi=$(date +%m)
case $runi in
1 | 2 | 3 )
#如果月份是 1,2,3 参数为0
i=0
j=0
;;
*)
i=1
j=1
#如果是3月以后的月份,天干地支数各+1
y=$(date +%d)
h=$(date +%H)
case $h in
23)
li=1
;;
*)
li=0
esac
#gan=$(( $(( $o+$y+$i+$li )) % 10 ))
#zhi=$(( $(( $p+$y+$j+$li )) % 12 ))
;;
#如果是平年,则用下面的公试计算当年的元旦天干地支,
*)
c=$(( $(date +%Y) - $(( $(date +%Y) % 4 )) ))
#计算出本年是闰年后的第几年,后求出上一个闰年时间。
g=$(( $(date +%Y) % 4 ))
#判断今年是不是闰年
a=$(( $(( $(( $c + 100 )) / 4 )) % 10 ))
#求出上一个闰年的天干数
#计算闰年元旦天干数。2000年以后。
b=$(( $(( $(( $(( $c + 100 )) / 4 )) % 4 )) ))
#求出上一个闰年的地支数
#o=天干数 p=地支数
#计算当年当年元旦 地支在哪个选项里。
case $a in
1)
#如果上一个闰年天干是 “甲” ,则做下面的判断。
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
#如果今年是闰年后的第一年 天干数 +6 天克
o=7
;;
2)
#如果是第二年,+1 天顺
o=2
;;
3)
#如果是第三年,+6 天克
o=7
esac
t="甲"
;;
2)
#如果闰年的天干是 乙
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
#如果是闰年后的第一年 +6
o=8
;;
2)
#第二年 +1
o=3
;;
3)
#第三年 +6
o=8
esac
t="乙"
;;
3)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
#第一年 +6
o=9
;;
2)
#第二年 +1
o=4
;;
3)
#第三年 +6
o=9
esac
t="丙"
;;
4)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
o=10
;;
2)
o=5
;;
3)
o=10
esac
t="丁"
;;
5)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
o=1
;;
2)
o=6
;;
3)
o=1
esac
t="戊"
;;
6)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
o=2
;;
2)
o=7
;;
3)
o=2
esac
t="已"
;;
7)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
o=3
;;
2)
o=8
;;
3)
o=3
esac
t="庚"
;;
8)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
o=4
;;
2)
o=9
;;
3)
o=4
esac
t="辛"
;;
9)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
o=5
;;
2)
o=10
;;
3)
o=5
esac
t="壬"
;;
10)
nianshut=$(( $(date +%Y) % 4 ))
case $nianshut in
1)
o=6
;;
2)
o=1
;;
3)
o=6
esac
t="癸"
esac
#下面开始计算地支
case $b in
1)
#如果上一年的地支是 午(7)
nians=$(( $(date +%Y) % 4 ))
case $nians in
1)
#第一年 +6 地冲 7+6)%12=1
p=1
;;
2)
#第二年 -1 地逆 7-1)%12=6
p=6
;;
3)
#第三年 +4 地库 7+4)%12=11
p=11
esac
;;
2)
#如果上个闰年的地支是 卯(4)计算方法同上
nians=$(( $(date +%Y) % 4 ))
case $nians in
1)
p=5
;;
2)
p=3
;;
3)
p=8
esac
;;
3)
#如果上个闰年的地支是 子(1)
nians=$(( $(date +%Y) % 4 ))
case $nians in
1)
p=7
;;
2)
p=12
;;
3)
p=5
esac
;;
0)
#如果上年闰年的地支是 酉(10)
nians=$(( $(date +%Y) % 4 ))
case $nians in
1)
p=4
;;
2)
p=9
;;
3)
p=2
esac
esac
#计算地支 下面是每个月要加减的参数。
yue=$(date +%m)
if [[ "$yue" -eq 1 ]]
then
i=-1
j=-1
elif [[ "$yue" -eq 2 ]]
then
i=0
j-6
elif [[ "$yue" -eq 3 ]]
then
i=-2
j=10
elif [[ "$yue" -eq 4 ]]
then
i=-1
j=5
elif [[ "$yue" -eq 5 ]]
then
i=-1
j=-1
elif [[ "$yue" -eq 6 ]]
then
i=0
j=6
elif [[ "$yue" -eq 7 ]]
then
i=0
j=0
elif [[ "$yue" -eq 8 ]]
then
i=1
j=7
elif [[ "$yue" -eq 9 ]]
then
i=2
j=2
elif [[ "$yue" -eq 10 ]]
then
i=2
j=8
elif [[ "$yue" -eq 11 ]]
then
i=3
j=3
else
i=3
j=9
fi
y=$(date +%d)
h=$(date +%H)
case $h in
23)
li=1
;;
*)
li=0
esac
#如果现在的时间是23时,那么在计算天数时要多加一天,因为干支里第天的开始是从子时也就是23时开始。
esac
#case 大架构到这里结束。
#$o是当年元旦的干数 $p是当年元旦的支数 $y是当月的日数 $i,$j是当月的加减参数。
gan=$(( $(( $o+$y+$i+$li )) % 10 ))
zhi=$(( $(( $p+$y+$j+$li )) % 12 ))
case $gan in
#计算天干数,如果在下面的选项里,则是当天的天干。
1)
ca="甲"
;;
2)
ca="乙"
;;
3)
ca="丙"
;;
4)
ca="丁"
;;
5)
ca="戊"
;;
6)
ca="已"
;;
7)
ca="庚"
;;
8)
ca="辛"
;;
9)
ca="壬"
;;
0)
ca="癸"
esac
#计算当天的地支
case $zhi in
#如果在下面的选项里则是当天的地支数
1)
da="子"
;;
2)
da="丑"
;;
3)
da="寅"
;;
4)
da="卯"
;;
5)
da="辰"
;;
6)
da="巳"
;;
7)
da="午"
;;
8)
da="末"
;;
9)
da="申"
;;
10)
da="酉"
;;
11)
da="戌"
;;
0)
da="亥"
esac
echo "$ca$da日"
#输出当天的天干地支
本文出自 “星河码头” 博客,请务必保留此出处http://liy607.blog.51cto.com/2892862/1343278