shell 获取昨天日期

来源:互联网 发布:电脑模拟笛子软件 编辑:程序博客网 时间:2024/05/16 06:00

       曾经做项目要获取昨天的日期,那时找到很多方法,最终根据TZ来获取昨天的日期,那时感觉这个很牛,觉得自己不懂别人也就不懂吧,我用了,别人就应该觉得我牛!嘿嘿…题外话。不过昨天又碰到了这个问题,这次是可以向脚本中传参来获取N天前的日期,看到别人写的好麻烦,心想如果用时区来写不简单的很吗,那样就不用判断年月日了吧,于是昨天用了3、4行达到了别人用3、40行要实现的内容,成就感还是有一点的吐舌头


shell获取昨天日期的几种方式

1)TZ='GMT+16' date +%Y%m%d

2)date -d 'yesterday' +%Y%m%d
3)date -d "1 day ago" +%Y%m%d
4)date +%Y%m%d --date='last day'

今天本来是想系统的看看的,没想到方法真是很多啊!大家可以用“shell 时区 昨天”等关键字搜索,答案遍地。当然我也找到了一篇比较好的记录下来,以便日后自己学习方便,并在此表示感谢http://scmbob.org/special_usage_of_date.html

date非常规用法总结

以下讨论的内容主要涉及到3个方面:

1. 数字域的填充用法
2. 相对日期的获得
3. 时间戳和日期的互相转换

1. 数字域的填充:

默认情况下,在显示日期和时间时,date命令使用数字0填充数字域。例如,如果用两位数字显示月份,则6月显示为“06”,如下所示:

$ date +%m
06

当然,一切皆有变通,你可以用下述控制符来控制填充符号:

短线(-):       表示不填充数字域

下划线(_):  表示用空格填充数字域

Examples:

$ date +%d/%m
14/06
$ date +%-d/%-m
14/6
$ date +%_d/%_m
14/ 6   #注意/和6之间有个空格

2. 相对日期的获得

1), 获取相对当前日期的相对日期。
d 选项可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。

为了表述的简单明了点,我想还是直接举例说明吧:

主要有三种指令:
last/next指令
ago指令
负数指令

1> last/next指令:

#今天的时间
$ date +%Y-%m-%d
2011-06-14
$ date -d last-day +%Y-%m-%d
2011-06-13
$ date -d yesterday +%Y-%m-%d
2011-06-13

$ date -d next-day +%Y-%m-%d
2011-06-15
$ date -d tomorrow +%Y-%m-%d
2011-06-15
#除了day, month,支持的还有如week, year, hour, min, sec等
#这里就不再一一举例了
$ date -d last-month +%Y-%m-%d
2011-05-14
$ date -d next-month +%Y-%m-%d
2011-07-14

2. ago指令:

#同理,day, month, week, year, hour, min, sec都是支持的
$ date -d '1 day ago' +%Y-%m-%d
2011-06-13
$ date -d '2 days ago' +%Y-%m-%d
2011-06-12
#不加ago,那就表示相对于今天的后一天
$ date -d '1 day' +%Y-%m-%d
2011-06-15

3. 负数指令(负数很好理解,即得到相反的日期),以下两两是等效的:

$ date -d '-2 days' +%Y-%m-%d
2011-06-12
$ date -d '2 days ago' +%Y-%m-%d
2011-06-12

$ date -d '2 days' +%Y-%m-%d    #这里你也可以用+2来表示
2011-06-16
$ date -d '-2 days ago' +%Y-%m-%d
2011-06-16

2), 获取指定日期的相对时间

$ date -d '20110614 next-day' +%Y-%m-%d
2011-06-15
$ date -d 'june 14 -1 day' +%Y-%m-%d
2011-06-13

以下还有一种用法,不过要注意的是,这种方式在较早的操作系统中(如RedHat 4U7)可能不支持,需使用next/last指令代替

$ date -d '20110614 +2 days'

3. 时间戳和日期的互相转换:

$ date --date="2011-06-14" "+%s"
1307980800
$ date --date="1970-01-01 UTC  1307980800 seconds" "+%Y-%m-%d"
2011-06-14
$ date --date="@1307980800" "+%Y-%m-%d"
2011-06-14

4. 补充:

时间戳的转换还能用awkstrftime来实现,感谢bbgg1983……

$ echo 1307980800 | awk '{T=strftime("%F %T",$1);print T}'
2011-06-14 00:00:00

或者用sed,哈哈,感谢SS……

$ echo '1307980800' |sed -r -e "s/(.*)/date -d @\1 '+%Y-%m-%d %H:%M:%S'/e"
2011-06-14 00:00:00

最后,总结一下:date命令是很灵活的,更多功能,请大家自己慢慢发掘……



原创粉丝点击