名称
date
打印或设置系统日期和时间
如果要设置时间可以通过命令 dpkg-reconfigure tzdata 可视化界面设置
概要
date [OPTION] … [+FORMAT]
date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
描述
根据给定格式展示当前时间,或设置系统日期
OPTION
-
-d, --date=STRING
根据给定的STRING展示时间,而不是当前时间
-
-f, --file=DATEFILE
对DATEFILE中的每一个进行处理
-
-I[TIMESPEC], --iso-8601=[=TIMESPEC]
-
-r, --reference=FILE
展示FILE最后修改时间
-
-R, --rfc-2822
按照RFC 2822格式输出日期和时间,示例:Mon, 07 Aug 2018 10:45:30 -0600
-
–rfc-3339=TIMESPEC
按照RFC 3339格式输出日期和时间,示例: 2018-08-30 10:46:56-06:00。
TIMESPEC可选项有 ‘date’, ‘seconds’, ‘ns’ 3种
-
-s, --set=STRING
根据STRING设置时间
-
-u, --utc, --universal
展示或设置UTC(Coordinated Universal Time)时间
-
–help
帮助信息
FORMAT
控制时间输出的格式如下:
格式 | 说明 | 示例 |
---|---|---|
%a | 一周中某天的缩写 | Sun |
%A | 一周中某天的全称 | Sunday |
%b | 月的缩写 | Jan |
%B | 月的全称 | January |
%c | 日期和时间 | Thu Mar 3 23:05:25 2018 |
%C | 世纪 | 20 |
%d | 一个月中的某一天 | 01 |
%D | 日期,与%m/%d/%Y相同 | 08/30/2018 |
%e | 一个月中的某一天,空格填充,与%_d一样 | 30 |
%F | 日期全部,包含年月日,与%Y-%m-%d | 2018-08-30 |
%h | 月的缩写,与%b | Jan |
%H | 小时,00-23 | 16 |
%I | 小时,00-12 | 10 |
%j | 一年中的某天001-366 | 256 |
%k | 小时,0-23,空格填充,与%_H一样 | 空格 8 |
%l | 小时,00-12,空格填充,与%_H一样 | 空格 6 |
%m | 月,00-12 | 08 |
%M | 分钟,00-59 | 30 |
%R | 24小时格式的小时和分钟,同%H:%M | 08:40 |
%s | 秒,从1970-01-01 00:00:00 UTC开始 | 1535606375 |
%S | 秒,00-60 | 30 |
%T | 时间,同%H:%M:%S | 13:42:30 |
%u | 一周中的某天,1-7 | 1代表Monday |
%U | 一年中的某周,00-53,Sunday作为一周中的第一天 | 12 |
%w | 一周中的某天,0-6 | 0代表Sunday |
%W | 一年中的某周,00-53,Monday作为一周中的第一天 | 12 |
%y | 年的最后2为,00-99 | 18 |
%Y | 年 | 2018 |
%Z | 时区 | CST |
默认情况下,日期用数字0补全,如20180818,也可以设置其他补全字符
格式 | 说明 | 示例 |
---|---|---|
- | 连字符,不进行填充, | 如8月,直接显示8 |
_ | 下划线,用空格填充 | 如8月,直接显示 【空额】8 |
0 | 用0填充 | 如8月,直接显示08^ |
^ | 使用大写 | 如+%a=>Thu,+%^a=>THU |
# | 取反,如默认大写,则改为小写 | 如+%Z=>CST,+%#Z=>cst |
样例
-
秒转换为date
$ date --date='@2147483647' # 输出 Thu Jan 19 11:14:07 CST 2038
-
获取时间戳(秒)
$ date +%s # 输出 1535631152
-
指定格式
$ date +%Y-%m-%d%t%H:%M:%S # 输出 2018-08-30 20:20:27
-
秒到指定格式
$ date --date='@1535631152' +%Y-%m-%d%t%H:%M:%S # 输出 2018-08-30 20:12:32
-
指定时区,显示当前时间(通过 tzselect)
$ TZ='America/Los_Angeles' date # 输出 Thu Aug 30 05:10:41 PDT 2018
DATE STRING
–date=STRING是date提供的一个更自由的易读的方式,例如: yesterday, tomorrow, 1 day ago, 1 hour ago等,可惜没有找到一个STRING的指导说明。
-
昨天
$ date --date="yesterday" +%F # 输出 2018-08-29
-
明天
$ date --date="tomorrow" +%F # 输出 2018-08-31
-
一个小时之前
$ date --date="1 hour ago" +%Y-%m-%d%t%H:%M:%S # 输出 2018-08-30 19:26:23
-
通过秒的加减运算实现时间的获取,无论时昨天, 小时,分钟的计算
# 昨天 2018-08-29 $ date -d @$(( $(date --date="today" +%s) - 24 * 3600)) +"%Y-%m-%d"
参考
man date