2007年8月6日

在脚本里用 date 命令获得昨天或明天的日期

UNIX 下面写脚本经常要用到取日期,比如当前应用系统的日期是 2006/07/25,就需要计算出明天的日期2006/07/26,然后根据计算得到的日期做一些预处理,比如日期切牌这类的操作。

在 UNIX 环境下,我一直都是传一条 SQL 给数据库,比如 informix 下(oracle类似):

nextday=`dbaccess $SCH_DBS <<! 2>dev/null | cut -d' ' -f2
output to pipe 'grep -v ^$'
select first 1 date+1 from time_table;
!`

test $? && exit
echo $nextday


LINUX 就不必这么麻烦了。
今天看到一篇介绍 linux date命令 的文章,这里介绍的方法你绝对没试过:


假设计算机日期是 2007/08/06 ( 格式化的处理自已搞定,就是 %Y%-m-%d之类的,我就不罗嗦了)

昨天:
date --date='yesterday'
2007年 08月 05日 星期日 19:02:25 CST

前天:
date --date='1 days ago'
2007年 08月 04日 星期六 19:06:34 CST

半小时后: -30 minutes ;上一小时: 1 hour ago;上个月: 1 month ago ;去年:1 year ago


明天:
date --date='next day'
2007年 08月 07日 星期二 19:10:12 CST

date --date='-1 days ago'
2007年 08月 07日 星期二 19:08:51 CST

半小时后: 30 minutes ;下一小时: 1 hour;下个月: 1 month ;明年:1 year 一个月零五天: 1 month 5 day


有意思吧!想想还需要什么功能?

下周:
date --date='1 week'

周未:
date --date='this sunday'

变态组合一下:
date --date='-30 minutes -2 weeks +2 months'

?? 怎么解释?? (把飞机票送过来,时间是)在两个月提前2周半小时 ...... 够变态的!!


这还不够,还需要传入自已给定的时间作参数,计算指定日期时间之前或之后的时间:

我儿子十岁生日:(中国人的习惯是十周岁提前做,嘻嘻)

date --date='2008-08-08 08:08:08 UTC+8 +8 year -8 months' +'%F %T'
2015-12-08 08:08:08

呵呵,这句话的解释是 ^_^ ??

你自已折腾去吧。。。。。



二进制生存 http://www.pkblogs.com/binsos

没有评论: