当前位置:Linux教程 - Linux综合 - 用date获得前一天的日期

用date获得前一天的日期

  好象有date 有-24 有+%y%m%d等,谢了。 还有有办法获得3天前的日期吗? 唉,在b shell没有这个用法了,要想用纯shell做几天前后的运算,只有自己想办法了,+%y%m%d用于控制输出格式,作用有限,要想做的话,参见这个帖子大家的发言: 我的确在哪儿看到用一条命令就可以取昨天或明天的日期, 参数中有-24或+24。没那么复杂 好象用到了参数TZ=-24;eXPort TZ什么的 改变时区,应该可以实现,确实是个好方法。 不会吧,你说的俺都明白了,你自己还不懂? date命令的显示是与环境变量TZ有关的 看以下的命令操作,你应该便明白了, $#看当前时区 $echo $TZ CST-8 $#显示当前时间 $date Mon Apr 2 15:48:36 CST 2002 $#改变当前时区, TZ=CST+16;export TZ $#显示当前时间(中间未改变系统时间,但date命令的显示已为昨天) Mon Apr 1 15:48:33 CST 2002 #!/bin/sh # ydate: A Bourne shell script that # prints yestarday's date # Output form: Month Day Year # From Focus on Unix: http://unix.about.com # Set the current month day and year. month=`date +%m` day=`date +%d` year=`date +%Y` # Add 0 to month. This is a # trick to make month an unpadded integer. month=`expr $month + 0` # SuBTract one from the current day. day=`expr $day - 1` # If the day is 0 then determine the last # day of the previous month. if [ $day -eq 0 ]; then # Find the preivous month. month=`expr $month - 1` # If the month is 0 then it is Dec 31 of # the previous year. if [ $month -eq 0 ]; then month=12 day=31 year=`expr $year - 1` # If the month is not zero we need to find # the last day of the month. else case $month in 135781012) day=31;; 46911) day=30;; 2) if [ `expr $year % 4` -eq 0 ]; then if [ `expr $year % 400` -eq 0 ]; then day=29 elif [ `expr $year % 100` -eq 0 ]; then day=28 else day=29 fi else day=28 fi ;; esac fi fi # Print the month day and year. echo $month $day $year exit 0 时区转换实在是太精妙了!:-) 如果在shell中改了时区,执行完后,系统真正的时区还是正确的吗? 回楼上:最好你要把TZ的设置该回去了。 不过我在实践中用的方法是: 如果你的主机能够连接到数据库的话,比如可以连接到SYBASE数据库,那就可以利用数据库里面计算时间的丰富的函数了,比如 dateadd(day,getdate(),-1) 就能得到最天的日期了 因为这个贴子被版主盖过章,所以在此跟一下。 最近经常看到有网友关于相对日期问题的贴子,这在shell下进行解决时比较头疼。现将我作的几个程序贴出来与大家分享。虽然是用c写的,把它们贴在这里,我想大家也不会太反对的。其中一个程序以前发表在sco版下,现在早已淹没在汪洋大海中了,无从查找。 因为是早先刚学c时的作品,且英文又不行,故写出的程序比较难看,请大家别见笑。 相关链接: date=`expr `date +%m%d` - 1`
[1] [2] 下一页 

这儿有一个我写的计算昨天的函数,可能是纯shell中唯一的简单解决方案吧,要想将其应用在计算任意天前后,恐怕还是不太方便的,看看,能否满足? yesterday () { _year=$1;_month=$2;_day=$3 if [ $_day -eq 1 ];then if [ $_month -eq 1 ];then _year=`expr $_year - 1` _month=12 else _month=`expr $_month - 1` fi _day=`echo `cal $_month $_year`awk '{print $NF}'` else _day=`expr $_day - 1` fi echo "$_year $_month $_day"awk '{if (length($2)==1) $2=0$2;if (length($3)==1) $3=0$3;print $1,$2,$3}' } unix 我没有试过,Linux上可以用 date --date "1 days ago" yy=`date +%Y` #Year yyyy mm=`date +%m` #Month mm dd=`date +%d` #Day dd if [ $dd = "01" ] #如果为月初则计算上月末的日期 then lm=`expr $mm - 1 ` #lm 上月 if [ $lm -eq 0 ] then lm=12 fi case $Fm in 135781012) Yesterday=31 ;; 46911) Yesterday=30 ;; 2) #计算闰月 if [ ` expr $yy % 4 ` -eq 0 -a `expr $yy % 100 ` -ne 0 -o ` expr $yy % 400 ` -eq 0 ] then Yesterday=29 else Yesterday=28 fi ;; esac else #如果不是月初的处理 Yesterday=`expr $dd - 1 ` if [ $Yesterday -lt 10 ] ###上旬日期处理 then Yesterday=0$Yesterday fi fi 结果: today=20020301 yesterday=28

(出处:http://www.sheup.com)


上一页 [1] [2] 

case $Fm in 135781012) Yesterday=31 ;; 46911) Yesterday=30 ;; 2) #计算闰月 if [ ` expr $yy % 4 ` -eq 0 -a `expr $yy % 100 ` -ne 0 -o ` expr $yy % 400 ` -eq 0 ] then Yesterday=29 else Yesterday=28 fi ;; esac else #如果不是月初的处理 Yesterday=`expr $dd - 1 ` if [ $Yesterday -lt 10 ] ###上旬日期处理 then Yesterday=0$Yesterday fi fi 结果: today=20020301 yesterday=28

(出处:http://www.sheup.com/)


上一页 [1] [2] [3]