以下讨论的内容主要涉及到3个方面:
1. 数字域的填充用法2. 相对日期的获得
3. 时间戳和日期的互相转换
1. 数字域的填充:
默认情况下,在显示日期和时间时,date命令使用数字0填充数字域。例如,如果用两位数字显示月份,则6月显示为“06”,如下所示:
06
当然,一切皆有变通,你可以用下述控制符来控制填充符号:
短线(-): 表示不填充数字域
下划线(_): 表示用空格填充数字域
Examples:
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
2011-06-13
$ date -d yesterday +%Y-%m-%d
2011-06-13
2011-06-15
$ date -d tomorrow +%Y-%m-%d
2011-06-15
# 这里就不再一一举例了
$ date -d last-month +%Y-%m-%d
2011-05-14
$ date -d next-month +%Y-%m-%d
2011-07-14
2. ago指令:
$ date -d '1 day ago' +%Y-%m-%d
2011-06-13
$ date -d '2 days ago' +%Y-%m-%d
2011-06-12
$ date -d '1 day' +%Y-%m-%d
2011-06-15
3. 负数指令(负数很好理解,即得到相反的日期),以下两两是等效的:
2011-06-12
$ date -d '2 days ago' +%Y-%m-%d
2011-06-12
2011-06-16
$ date -d '-2 days ago' +%Y-%m-%d
2011-06-16
2), 获取指定日期的相对时间
2011-06-15
$ date -d 'june 14 -1 day' +%Y-%m-%d
2011-06-13
以下还有一种用法,不过要注意的是,这种方式在较早的操作系统中(如RedHat 4U7)可能不支持,需使用next/last指令代替:
3. 时间戳和日期的互相转换:
1307980800
2011-06-14
4. 补充:
时间戳的转换还能用awk的strftime来实现,感谢bbgg1983……
2011-06-14 00:00:00
或者用sed,哈哈,感谢SS……
2011-06-14 00:00:00
最后,总结一下:date命令是很灵活的,更多功能,请大家自己慢慢发掘……