shell 获取昨天日期
2013-07-06 13:47
260 查看
曾经做项目要获取昨天的日期,那时找到很多方法,最终根据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. 补充:
时间戳的转换还能用awk的strftime来实现,感谢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命令是很灵活的,更多功能,请大家自己慢慢发掘……
。
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. 补充:
时间戳的转换还能用awk的strftime来实现,感谢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命令是很灵活的,更多功能,请大家自己慢慢发掘……
相关文章推荐
- Shell中获取取今天、明天、昨天和多天前日期
- IBM AIX 下shell获取昨天的日期
- linux中用shell获取昨天、明天或多天前的日期
- shell与perl获取昨天、明天或多天前的日期
- aix shell 获取昨天的日期
- linux centos shell 脚本 获取 昨天前天大前天日期
- (转载)shell中用date命令获取昨天、明天或者多天前的日期
- linux中用shell获取昨天、明天或多天前的日期
- shell date 获取昨天日期及几种特殊格式
- 汇总shell获取昨天日期
- Linux中用shell获取昨天、明天或多天前的日期
- linux中用shell获取昨天、明天或多天前的日期
- linux中用shell获取昨天、明天或多天前的日期
- linux中用shell获取昨天、明天或多天前的日期
- linux中用shell获取昨天、明天或多天前的日期
- 【备忘】linux中用shell获取昨天、明天或多天前的日期
- Mac Shell获取昨天日期
- linux中用shell获取昨天、明天或多天前的日期
- shell date 获取昨天日期