获取当前时间距纪元时间(1970年1月1日)所经过的天数: 在获取两个时间之间的差值时,需要考虑很多问题,如闰年、月份中不同的天数等。然而如果我们能够确定两个时间点之间天数的差值,那么再计算时分秒的差值时就非常简单了。在系统提供的C语言函数中,获取的时间值是从1970年1月1日0点到当前时间所流经的秒数,如果我们基于此计算两个时间之间天数的差值,将会大大简化我们的计算公式。 /> cat > test6.sh #!/bin/sh #1. 将date命令的执行结果(秒 分 小时 日 月 年)赋值给数组变量DATE。 declare -a DATE=(`date +"%S %M %k %d %m %Y"`) #2. 为了提高效率,这个直接给出1970年1月1日到新纪元所流经的天数常量。 epoch_days=719591 #3. 从数组中提取各个时间部分值。 year=${DATE[5]} month=${DATE[4]} day=${DATE[3]} hour=${DATE[2]} minute=${DATE[1]} second=${DATE[0]} #4. 当月份值为1或2的时候,将月份变量的值加一,否则将月份值加13,年变量的值减一,这样做主要是因为后面的公式中取月平均天数时的需要。 if [ $month -gt 2 ]; then month=$((month+1)) else month=$((month+13)) year=$((year-1)) fi #5. year变量参与的运算是需要考虑闰年问题的,该问题可以自行去google。 #6. month变量参与的运算主要是考虑月平均天数。 #7. 计算结果为当前日期距新世纪所流经的天数。 today_days=$(((year*365)+(year/4)-(year/100)+(year/400)+(month*306001/10000)+day)) #8. 总天数减去纪元距离新世纪的天数即可得出我们需要的天数了。 days_since_epoch=$((today_days-epoch_days)) echo $days_since_epoch seconds_since_epoch=$(((days_since_epoch*86400)+(hour*3600)+(minute*60)+second)) echo $seconds_since_epoch CTRL+D /> . ./test6.sh 15310 1322829080 需要说明的是,推荐将该脚本的内容放到一个函数中,以便于我们今后计算类似的时间数据时使用。
相关文章: