Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3032919
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-05-14 14:03:18

使用方式 :
  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”,如下所示:

  1. date +%Y%m%d
  2. 20110704

在一些数字提取或比较的时候不需要补位的0,有这2种办法:

短线(-):    表示不填充数字域

下划线(_):  表示用空格填充数字域

  1. date +%Y%-m%-d
  2. 201174
  3. date +%Y%_m%_d
  4. 2011 7 4

2. 相对日期的获得

1), 获取相对当前日期的相对日期。
d 选项可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。

为了表述的简单明了点,我想还是直接举例说明吧:

1> last/next指令:

  1. #今天的时间
  2. $ date +%Y-%m-%d
  3. 2011-06-14

  4. $ date -d last-day +%Y-%m-%d
  5. 2011-06-13
  6. $ date -d yesterday +%Y-%m-%d
  7. 2011-06-13


  8. $ date -d next-day +%Y-%m-%d
  9. 2011-06-15
  10. $ date -d tomorrow +%Y-%m-%d
  11. 2011-06-15
  12. #除了day, month,支持的还有如week, year, hour, min, sec等
  13. #这里就不再一一举例了
  14. $ date -d last-month +%Y-%m-%d
  15. 2011-05-14
  16. $ date -d next-month +%Y-%m-%d
  17. 2011-07-14

 

2. ago指令:

  1. #同理,day, month, week, year, hour, min, sec都是支持的
  2. $ date -d "1 day ago" +%Y-%m-%d
  3. 2011-06-13
  4. $ date -d "2 days ago" +%Y-%m-%d
  5. 2011-06-12

  6. #不加ago,那就表示相对于今天的后一天
  7. $ date -d "1 day" +%Y-%m-%d
  8. 2011-06-15

 

3. 负数指令(负数很好理解,即得到相反的日期),以下两两是等效的:

  1. $ date -d "-2 day" +%Y-%m-%d
  2. 2011-06-12
  3. $ date -d "2 day ago" +%Y-%m-%d
  4. 2011-06-12


  5. $ date -d "2 day" +%Y-%m-%d #这里你也可以用+2来表示
  6. 2011-06-16
  7. $ date -d "-2 day ago" +%Y-%m-%d
  8. 2011-06-16

  9. #同样 "day, month, week, year, hour, min, sec" 都是可以进行计算的

 

2), 获取指定日期的相对时间

  1. $ date -d "20110614 next-day" +%Y-%m-%d
  2. 2011-06-15
  3. $ date -d "june 14 -1 day" +%Y-%m-%d
  4. 2011-06-13

以下还有一种用法,不过要注意的是,这种方式在较早的操作系统中(如RedHat 4U7)可能不支持,需使用next/last指令代替

  1. $ date -d "20110614 +2 days" +%Y-%m-%d

 

3. 时间戳和日期的互相转换:

  1. $ date -d "2011-06-14" +%s
  2. 1307980800

  3. $ date -d "1970-01-01 UTC 1307980800 seconds" +%Y-%m-%d
  4. 2011-06-14

  5. $ date -d "@1307980800" +%Y-%m-%d
  6. 2011-06-14

  7. $ date --date="@1307980800" +%Y-%m-%d
  8. 2011-06-14

4. 补充:

时间戳的转换还能用awkstrftime来实现:

  1. echo "1307980911" | awk '{T=strftime("%F %T",$1);print T}'
  2. 2011-06-14 00:01:51

或者用sed:

  1. $ echo "1307980911" | sed "s/\(.*\)/date -d @\1 '+%Y-%m-%d %H:%M:%S'/e"
  2. 2011-06-14 00:01:51
  3. #特别注意末尾的e 是excute 执行命令的意思,有点类似 |sh 管道给shell执行。

特别感谢bob,文章是在他博客转载的,欢迎大家访问他的博客:

阅读(5935) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

linux_kaige2011-11-13 11:19:42

最初我是看awk的文章翻到你的博文的,看了你的sed之后,我才知道sed还可以这样用。。。

zooyo2011-11-13 11:15:29

linux_kaige: 笔误,不是致命的,呵呵!系统有些东西还是很可怕的,经常分享点你的文章,我也主要搞系统维护、脚本方面,还得多跟你学习啊.....
谢谢捧场,我也不是搞运维的,学习这些就是个爱好。

linux_kaige2011-11-13 11:10:22

zooyo: 谢谢提醒,呵呵错得离谱了......
笔误,不是致命的,呵呵!系统有些东西还是很可怕的,经常分享点你的文章,我也主要搞系统维护、脚本方面,还得多跟你学习啊

zooyo2011-11-12 21:27:12

linux_kaige: hi 哥们,标题有个small mistake,date is not data,笔误,呵呵!.....
谢谢提醒,呵呵错得离谱了.

linux_kaige2011-11-12 20:44:23

hi 哥们,标题有个small mistake,date is not data,笔误,呵呵!