# date - 显示或设置系统时间与日期

以给定的格式显示当前的日期,或者设置系统时间。

# 适用范围

RedHat
RHEL
Ubuntu
CentOS
Debian
Deepin
SUSE
openSUSE
Fedora
Linux Mint
Alpine Linux
Arch Linux

# 语法

date  [选项]
date  [+格式]
date  -u  [参数]

参数格式[MMDDhhmm[[CC]YY][.ss]],分别对应(月、日、时、分、年前两位、年后两位、秒)

# 选项

-f, --file=DATEFILE          # 和“--date”一样,文件的每一行都设置一次
-d, --date=STRING            # 显示字符串代表的时间,注意不是当前时间
-r, --reference=FILE         # 显示文件的最后修改时间
-R, --frc-2822               # 以rfc-2822的方式输出日期和时间,
--rfc-3339=TIMESPEC          # 以rfc-3339的方式输出日期和时间,精度可以是date、seconds、ns,日期和时间用一个空格隔开
-s,  --set=STRING            # 用指定字符串设置时间
-u,  --utc, --universal      # 输出或者设置通用时间

--help                           # 显示帮助文档
--version                        # 显示命令版本信息

format可用的转义序列如下:

%%      百分号
%a      当地缩写的工作日名称(例如,Sun)
%A      当地完整的工作日名称(例如,Sunday)
%b      当地缩写的月份名称(例如,Jan)
%B      当地完整的月份名称(例如,January)
%c      当地的日期和时间(例如,Thu Mar  3 23:05:25 2005)
%C      世纪,和%Y类似,但是省略后两位(例如,20)
%d      一月中的一天(例如,01)
%D      日期,等价于%m/%d/%y
%e      一月中的一天,格式使用空格填充,等价于%_d
%F      完整的日期;等价于%+4Y-%m-%d
%g      ISO标准计数周的年份的最后两位数字
%G      ISO标准计数周的年份,通常只对%V有用
%h      等价于%b
%H      小时,范围(00..23)
%I      小时,范围(00..23)
%j      一年中的一天,范围(001..366)
%k      小时,使用空格填充,范围(0..23),等价于%_H
%l      小时,使用空格填充,范围(1..12),等价于%_I
%m      月,范围(01..12)
%M      分钟,范围(00..59)
%n      换行符
%N      纳秒,范围(000000000..000000000)
%p      用于表示当地的AM或PM,如果未知则为空白
%P      类似于%p,但用小写表示
%q      季度,范围(1..4)
%r      当地以12小时表示的时钟时间(例如,11:11:04 PM)
%R      24小时每分钟;等价于%H:%M
%s      自协调世界时1970年01月01日00时00分以来的秒数
%S      秒数,范围(00..60)
%t      水平制表符
%T      时间;等价于%H:%M:%S
%u      一周中的一天(1..7),1代表星期一
%U      一年中的第几周,周日作为一周的起始(00..53)
%V      ISO标准计数周,该方法将周一作为一周的起始(01..53)
%w      一周中的一天(0..6),0代表星期天
%W      一年中的第几周,周一作为一周的起始(00..53)
%x      当地的日期表示(例如,12/31/99)
%X      当地的时间表示(例如,23:13:48)
%y      年份后两位数字,范围(00..99)
%Y      年份
%z      +hhmm格式的数值化时区格式(例如,-0400)
%:z     +hh:mm格式的数值化时区格式(例如,-04:00)
%::z    +hh:mm:ss格式的数值化时区格式(例如,-04:00:00)
%:::z   数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30)
%Z      时区缩写(如EDT)

# 说明

默认情况下,使用数字0来填补数字时间中的空缺。当然也可以指定其他方式:“%-“,不填补;”%_“,使用空格填补;”%0“,使用0;”%^“使用大写字母;”%#“,使用相反的字母

“--date=String“是一种自由格式,是一种方便读取的日期字符串,例如“Sun,2月29日16:21:42-0800”或“2004-02-29 16:21:42:42”,甚至是“下星期四”。日期字符串可能包含指示日历日期、时间、时区、周中日、相对时间、相对日期和数字的项。空字符串表示一天的开始。日期字符串可以包含指示日历日期、时间、时区、星期数、相对时间、相对日期和数字的项。日期字符串格式比这里容易记录的要复杂,但是在info文档中有完整的描述。

# 举例

不适用任何参数,直接显示日期和时间

[sogrey@bogon ~]$ date
2021年 06月 23日 星期三 23:24:34 CST # 注意,这里显示的是CST时间
[sogrey@bogon ~]$ 

显示UTC时间

[sogrey@bogon ~]$ date -u
2021年 06月 23日 星期三 15:24:57 UTC
[sogrey@bogon ~]$ 

设置CST日期时间

[sogrey@bogon ~]$ sudo date -s 2018-9-4 # 这里可以看到支持的日期格式。如果没有设置时间,那么默认就是0点0分
2018年 09月 04日 星期二 00:00:00 CST
[sogrey@bogon ~]$ sudo date -s 20180905
2018年 09月 05日 星期三 00:00:00 CST
[sogrey@bogon ~]$ date -s 2018/9/6
date: 无法设置日期: 不允许的操作
2018年 09月 06日 星期四 00:00:00 CST
[sogrey@bogon ~]$ date -s 11:56   # 修改时间
date: 无法设置日期: 不允许的操作
2021年 06月 23日 星期三 11:56:00 CST
[sogrey@bogon ~]$ date -s 11:54:40
date: 无法设置日期: 不允许的操作
2021年 06月 23日 星期三 11:54:40 CST
[sogrey@bogon ~]$ 

显示当前是一年中的第几周,第几天

[sogrey@bogon ~]$ date +第%U周第%j天
第25周第174天
[sogrey@bogon ~]$ 

显示12小时制度下的时间

[sogrey@bogon ~]$ date +%r
下午 11时28分49秒
[sogrey@bogon ~]$ date +%p%H:%M:%S
下午23:28:57
[sogrey@bogon ~]$ 

显示当前日期

[sogrey@bogon ~]$  date +%x
2021年06月23日
[sogrey@bogon ~]$  date +%F
2021-06-23
[sogrey@bogon ~]$ date +%Y-%m-%d # 多格式拼接
2021-06-23
[sogrey@bogon ~]$