date
命令在 Linux 系统中主要用来获取或设置系统日期和时间。命令提供了强大的格式化输出功能,可以根据需要获取任意范围的时间信息。掌握这个命令可以为日常 Shell 脚本的开发带来不少便利。比如按日期归档或备份数据,就离不开这个命令的支持。本文全面的归纳了这个命令的使用格式和选项参数列表,并提供了一些案例以供参考。
date 命令格式
date [选项]... [+格式]
date [选项] [MMDDhhmm[[CC]YY][.ss]]
date 命令示例
查看当前系统时间:
date
格式化显示指定的时间:
date -d '2022-09-21 12:00:00'
-d
参数后的日期还支持一些特殊语义值,比如查看昨天的时间信息:
date -d 'yesterday'
一些常用的语义值格式如下:
yesterday
: 昨天tomorrow
: 明天friday
: 本周五last friday
: 上周五next friday
: 下周五next week
: 下周今天2 days
: 两天后2 days ago
: 两天前
以上这些语义值可以根据格式举一反三使用。
查看文件最后修改时间:
date -r /etc/hosts
按指定格式显示时间:
date +"Year: %Y, Month: %m, Day: %d"
上面命令中的 %Y
,%m
和 %d
是 date
命令支持的特殊格式字符,类似可用的特殊格式字符可以参考文末结尾的格式参考列表。
date 命令选项参数
缩写 | 完整名称 | 说明 |
---|---|---|
-d |
--date= STRING |
显示由 STRING 指定的时间, 而不是当前时间 |
-f |
--file= DATEFILE |
显示 DATEFILE 中每一行指定的时间, 如同将 DATEFILE 中的每行作为 --date 的参数一样 |
-I |
--iso-8601 [=TIMESPEC] |
按照 ISO-8601 的日期/时间格式输出时间. TIMESPEC=date (或者不指定时)仅输出日期,等于 hours , minutes , 或 seconds 时按照指定精度输出日期及时间 |
-r |
--reference= FILE |
显示 FILE 的最后修改时间 |
-R |
--rfc-822 |
根据 RFC-822 指定格式输出日期 |
-s |
--set= STRING |
根据 STRING 设置时间 |
-u |
--utc , --universal |
显示或设置全球时间(格林威治时间) |
--help |
显示本帮助文件并退出 | |
--version |
显示版本信息并退出 |
date 命令格式参考
格式 FORMAT 控制着输出格式. 仅当选项指定为全球时间时本格式才有效。 分别解释如下:
格式符号 | 说明 | 示例 |
---|---|---|
%% |
文本格式的百分号字符 | |
%a |
当前区域的星期几的简写 | Sun..Sat |
%A |
当前区域的星期几的全称 | Sunday..Saturday |
%b |
当前区域的月份的简写 | Jan..Dec |
%B |
当前区域的月份的全称 | January..December |
%c |
当前区域的日期和时间 | Sat Nov 04 12:02:33 EST 1989 |
%d |
月份中的几号,用两位表示 | 01..31 |
%D |
日期,按照 月/日期/年 格式显示 | mm/dd/yy |
%e |
月份中的几号,个位数没有前面的零 | 1..31 |
%h |
同 %b |
|
%H |
小时,按 24 小时制显示 | 00..23 |
%I |
小时,按 12 小时制显示 | 01..12 |
%j |
一年中的第几天,用三位数表示 | 001..366 |
%k |
小时,按 24 小时制显示,个位数前面没有零 | 0..23 |
%l |
小时,按 12 小时制显示,个位数前面没有零 | 1..12 |
%m |
月份,用两位表示 | 01..12 |
%M |
分钟数,用两位表示 | 00..59 |
%n |
换行 | |
%p |
当前时间是上午 AM 还是下午 PM | |
%r |
时间,按 12 小时制显示 | hh:mm:ss [A/P]M |
%s |
从 1970年1月1日0点0分0秒到现在历经的秒数 | |
%S |
秒数(用两位表示) | 00..60 |
%t |
水平方向的 tab 制表符 | |
%T |
时间,按 24 小时制显示 | hh:mm:ss |
%U |
(一年中的)第几个星期,以星期天作为一周的开始(用两位表示) | 00..53 |
%V |
(一年中的)第几个星期,以星期一作为一周的开始(用两位表示) | 01..52 |
%w |
用数字表示星期几,0 代表星期天 | 0..6 |
%W |
(一年中的)第几个星期,以星期一作为一周的开始(用两位表示) | 00..53 |
%x |
按照 mm/dd/yy 格式显示当前日期 |
|
%X |
按照 %H:%M:%S 格式显示当前时间 |
|
%y |
年的后两位数字 | 00..99 |
%Y |
用 4 位数表示的年份 | 1970... |
%z |
按照 RFC-822 中指定的数字时区显示(如, -0500) (为非标准扩充) | |
%Z |
时区(例如, EDT (美国东部时区)), 如果不能决定是哪个时区则为空 |
默认情况下用 0 填充数据的空缺部分。GNU 的 date 命令能分辨在 %
和数字指示之间的以下修改。-
(连接号) 不进行填充,_
(下划线) 用空格进行填充。