shell 获取昨天日期

       曾经做项目要获取昨天的日期,那时找到很多方法,最终根据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命令是很灵活的,更多功能,请大家自己慢慢发掘……



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值