linux date命令
在linux环境下要取得几天前的时期只要使用
date -d "x days ago" +%Y%m%d
x用数字代替,如果需要几天前的直接写正数,如果要几天后的日期直接写负数即可;
date -d "x weeks ago" +%Y%m%d
x用数字代替,如果需要几周前的直接写正数,如果要几周后的日期直接写负数即可;
date -d "x years ago" +%Y%m%d
x用数字代替,如果需要几年前的直接写正数,如果要几年后的日期直接写负数即可;
看下面例子:
[root@showsky ~]# date +%Y%m%d
20100107
上面是今天的日期20100107
[root@showsky ~]# date -d "2 days ago" +%Y%m%d
20100105
上面是两天前的日期
[root@showsky ~]# date -d "4 days ago" +%Y%m%d
20100103
上面是四天前的日期
[root@showsky ~]# date -d "-1 days ago" +%Y%m%d
20100108
上面是一天后的日期
[root@showsky ~]# date -d "-2 days ago" +%Y%m%d
20100109
上面是两天后的日期
[root@showsky ~]# date -d "1 week ago" +%Y%m%d
20091231
上面是一周前的日期
[root@showsky ~]# date -d "1 year ago" +%Y%m%d
20090107
上面是一年前的日期
今天需要写一个shell脚本来完成apache日志的筛选,需求很简单,就是要把10分钟之前的日志找出来,然后放到另一个文件中。shell中用 date命令对日期进行处理,但怎么获取10分钟之前的时间呢,仔细看了一下help,没有看出对时间的“运算”,有的也就是一些输出格式的描述。但有一 个参数 -d or --date=STRING 其描述是display time described by STRING, not ‘now’,那这个STRING该怎么写才可以describe我想要的时间呢,使用 n second(s)/minute(s)/hour(s)/day(s)/year(s) ago 即可,其中n支持负数,那么就变成了之后的时间了。如:
获取10分钟之前的时间: date --date=“10 munites ago”
获取10天之前的时间: date --date=“10 days ago”
获取10分钟之后的时间: date --date=“-10 munites ago”
获取10天之后的时间: date --date=“-10 days ago”
这样就实现了使用shell命令做日期的计算了
linux下对date和timestamp的互转
1. date 到 timestamp:
$ date -d '2009-12-01 23:20' +%s
1259680800
2. timestamp 到 date
$ date -d '1970-01-01 1259680800 sec utc'
|
Tue Dec 1 23:20:00 CST 2009
3. timestamp 到 UTC date
[root@CDM ~]# date -d '1970-01-01 UTC 1284117137 sec' -u
五 9月 10 11:12:17 UTC 2010
4. date,当前时间转换为UTC timestamp
[root@CDM ~]# date +%s
1284117146
例子:将数字转成日期
# date -d '1970-01-01 1301538355 sec utc'
Thu Mar 31 10:25:55 CST 2011
再将这个日期转成自己的格式
# date -d "Thu Mar 31 10:25:55 CST 2011" +%Y-%m-%d-%H:%M
2011-03-31-10:25