shell时间处理

shell中与时间处理相关的内容整理:

  1. 显示当前时间,按指定格式显示时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
date    //显示当前时间,输出结果:Tue Mar  7 22:13:22 CST 2017
date +"%Y/%m/%d %H:%m:%S" //显示指定格式时间,输出结果:2017/03/07 22:03:05

//日期格式化符号说明如下:
%% 显示一个百分号'%'。
%a 星期的简称, 如:Sun/Mon/Tue/Wed/...
%A 星期完整名字,如:Sunday/Monday/...
%b 月份简称,如:Jan/Feb/...
%B 月份全称,如: January/February
%c 显示当前日期和时间,如:Thu Mar 3 23:05:25 2005 //date等同于date +"%c"
%C 世纪,如:现在是20世纪, 输入date +"%C"显示20。
%d 日期,如当前是8号,则显示:08
%D 完整日期,date +"%D"相当于date +"%m/%d/%y", 如:03/07/17(2017年3月7号)
%e 日期,用空格补全,而不是0, 如当前日期:7号,则显示" 7"。date +"%e" 相当于 date +"%_d"
%F 完整日期,相当于:date +"%Y-%m-%d", 输出:2017-03-07
%g 年份后2位,如果是2017, 则为:17
%G 年份全4位,如2017
%h 月份简称,如:Jan/Feb/Mar, 跟%b相同
%H 小时 (00/01/02/..23),24小时制
%I 小时 (01/02/..12), 12小时制。
%j 一年的第几天 (001/002/..366)
%k 小时,填充空格, 如 ( 0/ 1/ 2/..23); 相当于%_H。
%l 小时, 填充空格 ( 1/ 2/ 3/ ..12); 相当于 %_I。
%m 月份 (01/02/03/..12)
%M 分钟(00/01/02/..59)
%n 换行。date +"%d%n%d", 将会分成两行分别显示日期。
%N 纳秒 (000000000/000000001/..999999999)。
%p AM/PM, 即上午或者下午。
%P 跟%p意思一样, 不过是小写字母,即am/pm。
%r 显示12小时制的当前时间,如:10:48:05 PM。
%R 24小时制的当前时间和分钟,相当于: %H:%M,22:49。
%s 从1970-01-01 00:00:00 UTC开始的秒数,如:1488898232(对应时间:Tue Mar 7 22:50:32 CST 2017),相当于日期转时间戳。
%S 秒 (00/01/02/..60)。
%t 一个tab键,制表符。
%T 当前时间,相当于: %H:%M:%S。如:22:52:07。
%u 星期中的第几天 (1/2/..7); 1是星期一。
%U 一年中的第几个星期(00..53),星期天作为一个星期的第一天
%V 一年中的第几个星期(ISO标准)(01..53),星期一作为一个星期的第一天。
%w 星期中的第几天 (0..6); 0是星期天。
%W 一年中的第几个星期 (00..53),星期一作为一个星期的第一天。
%x 当前日期 (例如: 03/07/17)
%X 当前时间(例如: 23:13:48)。
%y 年的后两位 (00/02/..99)。
%Y 年,如:2017
%z +hhmm 数字时区(例如:北京:+0800)。
%:z +hh:mm 数字时区(例如:北京:+08:00)。
%::z +hh:mm:ss 数字时区 (例如:北京:+08:00:00)。
%:::z numeric time zone with : to necessary precision (e.g., -04, +05:30)。
%Z 字母时区缩写 (如, CST)。
  1. 时间数字转字符串,时间整数转字符串,时间戳转字符串,数字和字符串时间转换。
1
2
3
date --date @1488899583  //将从1970-01-01 00:00:00 UTC开始的秒数,转为字符串时间,1488899583这个整数秒转为字符串时间:Tue Mar  7 23:13:03 CST 2017。
date --date @"1488899583" //同上,即时间戳转字符串,或者整数秒转字符串时间。
date +"%s" //日期转时间戳,日期转整数。
  1. 设置当前时间
1
2
3
date -s "2017/05/08 23:28:13"   //设置日期和时间。
date -s "2017/05/08" //设置日期(注意,时间会同时被设置为00:00:00,慎用)。
date -s "23:28:13" //设置时间。
  1. 时间解析,将输入的字符串解析为时间
1
2
3
4
5
date -d "20170305"  //解析日期, 输出:Sun Mar  5 00:00:00 CST 2017。
date -d "03/05/2017" //解析日期,输出同上。
date -d "2017/03/05 11:12:13" //解析日期和时间, 输出: Sun Mar 5 11:12:13 CST 2017。
date -d "2017-03-05 21:12:17" +"%s" //将输入时间转为时间戳,输出:1488719537。
date -d "2017-03-05 21:12:17" +"%Y/%m/%d %H:%M:%S" //时间格式转换,将输入日期转换为自定义格式。
  1. 时间运算,时间加减运算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//时间加减运算,可以直接用-d命令结合year/month/day/hour/minute/second, 单复数都行
date -d "+1 days" //明天,当前时间加1天。
date -d "+2 days" //后天,当前时间加2天。
date -d "+15 days" //半个月之后,当前时间+15天。
date -d "+10 days" +"%Y%m%d %H:%M:%S" 当前时间加10天,并按指定格式输出。
date -d "-1 days" //昨天,当前时间减1天。
date -d "-2 days" //前天,当前时间减2天。
date -d "2017/03/05 +1 days" //指定日期加1天。
date -d "2017/03/05 -1 days" //指定日期减1天。
date -d "2017/03/08 +600 seconds" //指定日期加600秒。
date -d "2017/03/08 -600 seconds" //指定日期减600秒。
date -d "2017/03/08 +600 minutes" //指定日期加600分钟。
date -d "2017/03/08 -600 minutes" //指定日期减600分钟。
date -d "2017/03/08 +10 year" //指定日期加10年。
date -d "Tue Mar 10 14:12:13 CST 2015 +1 days" //指定日期时间,加一天。
date -d "15:21:11 03/18/2017 -1 days" //指定日期时间,减一天。注:时间放在日期的后面目前似乎不可用。