shell日期计算tips 2011-09-21

1. 如何计算 20120201前(或后)第30天(周\月\年)是哪天(周几)?

date -d “110201 30 days” +%y%m%d

date -d “110201 30 days ago” +%y%m%d

[解析] 系统支持,没啥好说的。几种变式如ago是向前,days可以换成months\weeks\years等,%w可返回是星期几。yymmdd格式便于排序比较,对海量日期数据处理的时候非常有好处。

2. 如何计算 20120201 - 201200301 之间有多少天?

date -f <(seq 120201 120301) +%F  2>/dev/null  wc -l

[解析]  -f 参数从文件中读取每一行给 date 作为 +%F 日期输出,如果是错误的日期当然就会报错,这里屏蔽掉错误信息。能输出的就是可用的日期,然后记数。

3. 如何计算 20120201 - 20120301 之间有多少个工作日?

date -f <(seq -f”%.f” 120201 120301) +%u 2>/dev/null grep [1-5] wc -l

[解析]  同样只输入星期几,然后用 grep 过滤到6和7,再记数。

4. 几个例子

#获取今天为出发点,num_day天之前的6位数字日期(如110823)

begin_date=`date -d "$CURRENT_DAY -${num_day} day" '+%y%m%d' `

#获取end_date这天为出发点, num_day天之前的6位数字日期

begin_date=`date --date="$end_date $num_day days ago" +%y%m%d`

#毅种循环

end_date=20120901
curr_date=20120801
while [ $curr_date -lt $end_date ]
do
    XXXX....
   curr_date=`date -d "next-day $curr_date" +%Y%m%d`
done



Powered by Jekyll on GitHub | ©2016 Meroa | Last modified: 2018-02-03