1. 数字域的填充:
默认情况下,在显示日期和时间时,date命令使用数字0填充数字域。例如,如果用两位数字显示月份,则6月显示为“06”,如下所示:
1 | $ date +%m |
当然,一切皆有变通,你可以用下述控制符来控制填充符号:
短线(-): 表示不填充数字域
下划线(_): 表示用空格填充数字域
Examples:
1 | $ date +%d/%m |
2. 相对日期的获得
2.1. 获取相对当前日期的相对日期
d 选项可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
为了表述的简单明了点,我想还是直接举例说明吧:
主要有三种指令:
last/next指令
ago指令
负数指令
2.1.1. last/next指令:
1 | #今天的时间 |
2.1.2. ago指令:
1 | #同理,day, month, week, year, hour, min, sec都是支持的 |
2.1.3. 负数指令(负数很好理解,即得到相反的日期),以下两两是等效的:
1 | $ date -d '-2 days' +%Y-%m-%d |
2.2. 获取指定日期的相对时间
1 | $ date -d '20110614 next-day' +%Y-%m-%d |
以下还有一种用法,不过要注意的是,这种方式在较早的操作系统中(如RedHat 4U7)可能不支持,需使用next/last指令代替:
1 | $ date -d '20110614 +2 days' |
3. 时间戳和日期的互相转换:
1 | $ date --date="2011-06-14" "+%s" |
4. 补充:
时间戳的转换还能用awk的strftime来实现,感谢bbgg1983……
1 | $ echo 1307980800 | awk '{T=strftime("%F %T",$1);print T}' |
或者用sed,哈哈,感谢SS……
1 | $ echo '1307980800' |sed -r -e "s/(.*)/date -d @\1 '+%Y-%m-%d %H:%M:%S'/e" |
最后,总结一下:date命令是很灵活的,更多功能,请大家自己慢慢发掘……