导言
前面时间段,学习了一个hwclock命令和clock命令的语法,本文主要是介绍date命令,这个命令也是十分常见的。
很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。
date命令
作用
用给出的FORMAT(格式)显示当前时间,或设置系统时间(日期)
用法
date [选项]... [+格式]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
详细全选项参数解释
短选项 | 长选项 | 含义(作用) |
---|---|---|
-d | --date=STRING | 显示字符串所指的日期与时间,而不是‘now’这种字符串。字符串前后必须加上双引号; STRING是比较随性的可读的字符串,比如说“2012-06-16 18:31:00”或者“next Thursday”,这个字符串通常包含日历时间、时间、星期、日期、相对时间,相对日期或者数字。 |
-f | --file=DATEFILE | 类似–date参数显示DATEFILE文件中的每行时间; 和-date参数类似,对文件DATEFILE里的每一行做date -d操作; 意思就是DATEFILE每一行都写着时间,从文件中每读出一行,并将时间以date -d ‘[每一行的内容]’ |
-I[TIMESPEC] | --iso-8601[=TIMESPEC] | 以ISO 8601 格式显示日期/时间。默认情况下,TIMESPEC值为‘date’(只显示日期),’hours’, ‘minutes’, or ‘seconds’对日期和时间显示相应的精度 |
-r | --reference=文件 | 显示文件指定文件的最后修改时间 |
-R | --rfc-2822 | 以RFC 2822格式输出日期和时间 例如:2016年10月2日,星期日 19:54:56 -0600 |
--rfc-3339=TIMESPEC | 以RFC 2822格式输出日期和时间。 对日期和时间显示相应的精度,TIMESPEC可取值’date’, ‘seconds’, 或’ns’。时间和日期的组件被单一的空格说分隔,比如“ 2016-10-02 19:54:56-06:00” | |
-s | --set=STRING | 以STRING的描述内容设置系统时间 |
-u | --utc 或--universal | 显示或设定为Coordinated Universal Time(UTC)时间格式 |
--help | 显示此帮助信息并退出 | |
--version | 显示版本信息并退出 |
FORMAT解释
给定的格式FORMAT 控制着输出,解释序列如下:
格式 | 解释 | 实例 |
---|---|---|
%% | 一个文字的 % | % |
%a | 当前locale 的星期名缩写(例如: 日,代表星期日) | Sun |
%A | 当前locale 的星期名全称 (如:星期日) | Sunday |
%b | 当前locale 的月名缩写 (如:一,代表一月) | Oct |
%B | 当前locale 的月名全称 (如:一月) | October |
%c | 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25) | Sun 02 Oct 2016 09:25:55 PM CST |
%C | 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20) | 20 |
%d | 按月计的日期(例如:01) | 01 |
%D | 按月计的日期;等于%m/%d/%y | 10/02/16 |
%e | 按月计的日期,添加空格,等于%_d | 2 |
%F | 完整日期格式,等价于 %Y-%m-%d | 2016-10-02 |
%g | ISO-8601 格式年份的最后两位 (参见%G) | 16 |
%G | ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用 | 2016 |
%h | 等于%b | Oct |
%H | 小时(00-23) | 21 |
%I | 小时(00-12) | 09 |
%j | 按年计的日期(001-366) | 276 |
%k | 按小时计的日期,空格补充( 0..23)[解释,不足两位补充0为两位],等于%_H | 21 |
%l | 按小时计的日期,添加空格( 0..12)[解释,不足两位补充0为两位] | 9 |
%m | 月(01..12) | 10 |
%M | 分钟 (00..59) | 04 |
%n | 换行 | |
%N | 纳秒(000000000-999999999) | 960061182 |
%p | 当前locale 下的”上午”或者”下午”,未知时输出为空 | PM |
%P | 与%p 类似,但是输出小写字母 | pm |
%r | 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午) | 09:27:02 PM |
%R | 24 小时时间的时和分,等价于 %H:%M | 21:27 |
%s | 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 | 1475414279 |
%S | 秒(00-60) | 46 |
%t | 输出制表符 Tab | |
%T | 时间,等于%H:%M:%S | 21:19:46 |
%u | 星期,1 代表星期一 | 7 |
%U | 一年中的第几周,以周日为每星期第一天(00-53) | 40 |
%V | ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53) | 39 |
%w | 一星期中的第几日(0-6),0 代表周一 | 6 |
%W | 一年中的第几周,以周一为每星期第一天(00-53) | 39 |
%x | 当前locale 下的日期描述 (如:12/31/99) | 10/02/2016 |
%X | 当前locale 下的时间描述 (如:23:13:48) | 09:27:48 PM |
%y | 年份最后两位数位 (00-99) | 16 |
%Y | 年份 | 2016 |
%z | +hhmm数字时区(例如,-0400) | +0800 |
%:z | +hh:mm数字时区(例如,-04:00) | +08:00 |
%::z | 数字时区(例如,-04:00:00) | +08:00:00 |
%:::z | 数字时区带有必要的精度 (例如,-04,+05:30) | +08 |
%Z | 按字母表排序的时区缩写 (例如,EDT) | CST |
默认情况下,日期的数字区域以0 填充。
下面可选的标志可能跟在‘%’后:
- - (连字号) 不填补域
- _ (下划线)用空格填补
- 0 用0来填补
- ^ 尽可能使用大写字母
- # 尽可能使用小写
在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。
作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的表示方式;或者是0,在可能的情况下使用本地环境关联的数字符号。
常用选项
d选项
显示字符串所指的日期与时间
# 将从1970-01-01 UTC流逝的秒数转变成日期
[root@tqw tqw]# date --date='@2147483647'
Tue Jan 19 11:14:07 CST 2038
# 显示2014-05-02表示的日期
[root@tqw tqw]# date -d 2014-05-02
Fri May 2 00:00:00 CST 2014
[root@tqw tqw]# date --date=2014-05-02
Fri May 2 00:00:00 CST 2014
# 显示在美国的西海岸下周五9点的时间的当地时间
[tqw@localhost etc]$ date --date='TZ="America/Los_Angeles" 09:00 next Fri'
2016年 10月 08日 星期六 00:00:00 CST
s选项
以STRING的描述内容设置系统时间
#" "表示空格字符,-s 2015-10-03" "18:17:00设置2015-10-03 18:17:00为系统时间
#使用+%Y-%m-%d%" "%H:%M:%S指定2015-10-03 18:17:00的日期格式
[root@localhost ~]# date -s 2015-10-03" "18:17:00 +%Y-%m-%d%" "%H:%M:%S
2015-10-03% 18:17:00
#使用长命令方式设置
[root@localhost ~]# date --set=2015-10-03" "18:17:00 +%Y-%m-%d%" "%H:%M:%S
2015-10-03% 18:17:00
本例子不截图
f选项
类似–date参数显示DATEFILE文件中的每行时间;
#以下是文件中的内容
test
2016-10-01 22:37:00
2016-10-01 22:40:00
2016-10-01 22:50:08
# 将上诉内容写入文件
[root@tqw tqw]# touch test
[root@tqw tqw]# vim test
#逐行读取日期字符串并输出
[root@tqw tqw]# date -f test
Sat Oct 1 22:37:00 CST 2016
Sat Oct 1 22:40:00 CST 2016
Sat Oct 1 22:50:08 CST 2016
[root@tqw tqw]# date --file=test
Sat Oct 1 22:37:00 CST 2016
Sat Oct 1 22:40:00 CST 2016
Sat Oct 1 22:50:08 CST 2016
r选项
显示文件指定文件的最后修改时间
# 显示文件的最后修改时间
[root@tqw tqw]# date -r test
Sun Oct 2 22:39:03 CST 2016
[root@tqw tqw]# date --reference=test
Sun Oct 2 22:39:03 CST 2016
总结
本文介绍了date的全选项命令,并介绍了一些用法,date是很实用的命令,各位可以自行熟练使用。