使用方式 :
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 :
date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
时间方面 :
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数
参数 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
例子 :
显示时间后跳行,再显示目前日期 :
date '+%T%n%D'
显示月份与日数 :
date '+%B %d'
显示日期与设定时间(12:34:56) :
date --date '12:34:56'
注意 :
当你不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。
当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。
1. 数字域的填充:
默认情况下,在显示日期和时间时,date命令使用数字0填充数字域。例如,如果用两位数字显示月份,则7月显示为“07”,如下所示:
在一些数字提取或比较的时候不需要补位的0,有这2种办法:
短线(-): 表示不填充数字域
下划线(_): 表示用空格填充数字域
- date +%Y%-m%-d
- 201174
- date +%Y%_m%_d
- 2011 7 4
2. 相对日期的获得
1), 获取相对当前日期的相对日期。
d 选项可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
为了表述的简单明了点,我想还是直接举例说明吧:
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 day" +%Y-%m-%d
-
2011-06-12
-
$ date -d "2 day ago" +%Y-%m-%d
-
2011-06-12
-
-
-
$ date -d "2 day" +%Y-%m-%d #这里你也可以用+2来表示
-
2011-06-16
-
$ date -d "-2 day ago" +%Y-%m-%d
-
2011-06-16
-
-
#同样 "day, month, week, year, hour, min, sec" 都是可以进行计算的
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" +%Y-%m-%d
3. 时间戳和日期的互相转换:
- $ date -d "2011-06-14" +%s
- 1307980800
- $ date -d "1970-01-01 UTC 1307980800 seconds" +%Y-%m-%d
- 2011-06-14
- $ date -d "@1307980800" +%Y-%m-%d
- 2011-06-14
- $ date --date="@1307980800" +%Y-%m-%d
- 2011-06-14
4. 补充:
时间戳的转换还能用awk的strftime来实现:
- echo "1307980911" | awk '{T=strftime("%F %T",$1);print T}'
- 2011-06-14 00:01:51
或者用sed:
- $ echo "1307980911" | sed "s/\(.*\)/date -d @\1 '+%Y-%m-%d %H:%M:%S'/e"
- 2011-06-14 00:01:51
- #特别注意末尾的e 是excute 执行命令的意思,有点类似 |sh 管道给shell执行。
特别感谢bob,文章是在他博客转载的,欢迎大家访问他的博客:
阅读(5935) | 评论(6) | 转发(0) |