免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3751 | 回复: 7
打印 上一主题 下一主题

高手请进,关于任意两日期之间如何用shell准确计算天数的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-16 20:12 |只看该作者 |倒序浏览
比如:计算2005.12.20--2006.03.02一共多少天?......
如何实现.希望得到高手的指点,谢谢!!

论坛徽章:
0
2 [报告]
发表于 2006-06-16 20:17 |只看该作者
是不是任意的时间日期之间的天数啊?
如果是那样的话,自己要写一个函数了啊!
想想........
wayy2008 该用户已被删除
3 [报告]
发表于 2006-06-16 20:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-06-16 22:48 |只看该作者
如果有 gnu 的 date 就很容易:
1) 用 date -d "yyyy-mm-dd" +%s 分别得出兩個日期距 1970-01-01 的秒數
2) 相減得出來的差, 再除以 86400 就是天数.

论坛徽章:
0
5 [报告]
发表于 2006-06-16 23:48 |只看该作者
看起来有点复杂
算起来倒是对的,算头不算尾.
#!/bin/sh
#if [ $# -ne 3 ];then
#echo "Usage myproc 20040101 20060102"
#exit
#fi

#计算$y-$Y年的天数
comp_YT()
{
T=0
tTy=0
while [ $y -le $Y ]
do
if [ `expr $y % 4` -eq 0 -a `expr $y % 100` -ne 0 ]||[ `expr $y % 400` -eq 0 ];then
   T=366
else T=365
fi
tTy=`expr $tTy + $T`
y=`expr $y + 1`
done
}

#判断是否润年
comp_flag()
{
if [ `expr $YY % 4` -eq 0 -a `expr $YY % 100` -ne 0 ]||[ `expr $YY % 400` -eq 0 ];then
   flag=1
else flag=0
fi
}

#计算月天数
comp_MT()
{
tM=0
tTm=0
while [ $m -le 12 ]
do
if [ $flag -eq 1 ];then
case $m in
1|3|5|7|8|10|12)
         tM=31;;
2)     tM=29;;
4|6|9|11)
       tM=30;;
esac
tTm=`expr $tTm + $tM`
else
case $m in
1|3|5|7|8|10|12)
         tM=31;;
2)     tM=28;;
4|6|9|11)
       tM=30;;
esac
tTm=`expr $tTm + $tM`
fi
m=`expr $m + 1`
done
}

y=`echo $1|cut -c1-4`
y=`expr $y + 1`
Y=`echo $2|cut -c1-4`
comp_YT
YY=`echo $1|cut -c1-4`
comp_flag
M=`echo $1|cut -c5-6`
m=`expr $M \* 1`
D=`echo $1|cut -c7-8`
comp_MT
T1=`expr $tTy + $tTm - $D`

YY=`echo $2|cut -c1-4`
m=`echo $2|cut -c5-6`
m=`expr $m \* 1`
D=`echo $2|cut -c7-8`
comp_flag
comp_MT
T2=`expr $tTm - $D`
echo `expr $T1 - $T2`

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-06-17 13:39 |只看该作者
原帖由 網中人 于 2006-6-16 22:48 发表
如果有 gnu 的 date 就很容易:
1) 用 date -d "yyyy-mm-dd" +%s 分别得出兩個日期距 1970-01-01 的秒數
2) 相減得出來的差, 再除以 86400 就是天数.

GNU确实很伟大的说~

论坛徽章:
0
7 [报告]
发表于 2006-06-17 21:17 |只看该作者
非常感谢各位大虾的指点,特别是网兄何林兄,谢谢了。我这就去试试!!

论坛徽章:
0
8 [报告]
发表于 2006-06-18 11:33 |只看该作者
前几个星期我写了一堆函数,开始是要算昨天,这个简单,后来要算明天,想了想就抄了个函数来用,后来发现要用前天,我只好自己又写了个函数,可是好象还要用后天......!&@)(*&$)(#*&
还是这个好啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP