date
命令概述date
命令用于打印或设置系统的日期和时间,能够显示当前时间,支持多种时间格式的自定义输出,可以设置系统时间(需要管理员权限)。
date [选项]... [+格式]
date [选项] [MMDDhhmm[[CC]YY][.ss]]
date
即可显示当前的系统时间。[MMDDhhmm[[CC]YY][.ss]]
格式可以设置具体的日期和时间。date
命令的常用选项以下是一些常用选项和参数,可以大大提高 date
命令的灵活性和实用性:
选项 | 功能描述 |
---|---|
-d, --date=STRING |
显示由 STRING 指定的时间,而不是当前时间。例如:date -d "next Monday" 。 |
-f, --file=DATEFILE |
针对 DATEFILE 文件中的每一行内容,逐行显示对应的时间(等价于多次 --date 的调用)。 |
-I, --iso-8601[=TIMESPEC] |
以 ISO-8601 格式输出时间,TIMESPEC 可选值:date (默认)、hours 、minutes 、seconds 。 |
-r, --reference=文件 |
显示指定文件的最后修改时间。例如:date -r /etc/passwd 。 |
-R, --rfc-822 |
按 RFC-822 格式显示日期(如:Mon, 07 Aug 2006 12:34:56 -0600 )。 |
-s, --set=STRING |
根据 STRING 设置系统时间(需要管理员权限)。例如:date -s "2024-12-01 12:00:00" 。 |
-u, --utc, --universal |
以 UTC(协调世界时)显示或设置时间。 |
--help |
显示帮助信息并退出。 |
--version |
显示版本信息并退出。 |
date
命令支持通过格式符号自定义时间和日期的输出。以下是一些常见的格式符号及其用途:
格式符号 | 描述 | 示例输出 |
---|---|---|
%% |
字面上的 % |
% |
%Y |
年份(四位数) | 2024 |
%m |
月份(两位数) | 11 |
%d |
日期(两位数) | 28 |
%H |
小时(24 小时制,两位数) | 14 |
%M |
分钟(两位数) | 30 |
%S |
秒(两位数) | 45 |
%F |
完整日期(等价于 %Y-%m-%d ) |
2024-11-28 |
%T |
完整时间(等价于 %H:%M:%S ) |
14:30:45 |
%a |
星期的简写 | Thu (周四) |
%A |
星期的全称 | Thursday |
%z |
时区偏移量 | +0800 |
%Z |
时区名称 | CST (北京时间) |
date
date +"今天是:%Y年%m月%d日 %H:%M:%S"
date -d "7 days"
2024-11-28
+7 days
next Monday
date -f date.txt
输出:
2024年 11月 28日 星期四 00:00:00 CST
2024年 12月 05日 星期四 13:57:41 CST
2024年 12月 02日 星期一 00:00:00 CST
date -d "@2147483647"
date -r /var/log/syslog
TZ
设置时区:TZ='America/New_York' date
输出纽约时间。
在脚本中生成带时间戳的文件名:
filename="backup_$(date +'%Y%m%d_%H%M%S').tar.gz"
生成结果:backup_20241128_143045.tar.gz
需要管理员权限:
sudo date -s "2024-12-01 12:00:00"
date -d
选项格式date -d
支持多种标准日期格式:
格式 | 示例 | 描述 |
---|---|---|
YYYY-MM-DD |
2024-11-28 |
年-月-日,ISO 8601 格式(推荐)。 |
MM/DD/YYYY |
11/28/2024 |
月/日/年,常见的美式格式。 |
YYYYMMDD |
20241128 |
紧凑格式,无分隔符。 |
Month DD, YYYY |
November 28, 2024 |
月份全称(或简写)+ 日 + 年。 |
DD Month YYYY |
28 November 2024 |
日 + 月份全称(或简写)+ 年。 |
date -d "2024-11-28"
date -d "11/28/2024"
date -d "November 28, 2024"
date -d
可以指定具体的时间,支持 24 小时制或 12 小时制。
格式 | 示例 | 描述 |
---|---|---|
HH:MM |
14:30 |
24 小时制,小时和分钟。 |
HH:MM:SS |
14:30:45 |
24 小时制,小时、分钟和秒。 |
HH:MM:SS AM/PM |
02:30:45 PM |
12 小时制,带 AM/PM 标识。 |
date -d "2024-11-28 14:30"
date -d "11/28/2024 02:30:45 PM"
date -d
支持相对时间描述,允许基于当前时间前后偏移。
描述 | 示例 | 输出示例(假设当前时间为 2024-11-28) |
---|---|---|
now |
date -d "now" |
当前时间 |
tomorrow |
date -d "tomorrow" |
2024-11-29 |
yesterday |
date -d "yesterday" |
2024-11-27 |
+N days |
date -d "+7 days" |
2024-12-05(7 天后) |
-N days |
date -d "-7 days" |
2024-11-21(7 天前) |
+N weeks |
date -d "+2 weeks" |
2024-12-12(2 周后) |
-N weeks |
date -d "-2 weeks" |
2024-11-14(2 周前) |
+N months |
date -d "+3 months" |
2025-02-28(3 个月后) |
-N months |
date -d "-3 months" |
2024-08-28(3 个月前) |
+N years |
date -d "+1 year" |
2025-11-28(1 年后) |
-N years |
date -d "-1 year" |
2023-11-28(1 年前) |
date -d "tomorrow"
date -d "+7 days"
date -d "-2 weeks"
date -d "+3 months"
date -d
支持更复杂的自然语言描述,例如时间点、下一个星期几等。
描述 | 示例 | 输出示例(假设当前时间为 2024-11-28) |
---|---|---|
next WEEKDAY |
date -d "next Friday" |
2024-11-29(下一个星期五) |
last WEEKDAY |
date -d "last Monday" |
2024-11-25(上一个星期一) |
WEEKDAY |
date -d "Monday" |
2024-11-25(本周一,如果已过则下周一) |
HH:MM next WEEKDAY |
date -d "09:00 next Friday" |
2024-11-29 09:00 |
date -d "next Friday"
date -d "last Monday"
date -d "09:00 next Friday"
date -d
支持通过 @TIMESTAMP
格式解析 Unix 时间戳。
格式 | 示例 | 描述 |
---|---|---|
@TIMESTAMP |
date -d "@2147483647" |
将 Unix 时间戳转换为日期时间。 |
date -d "@2147483647"
可以结合日期和时间描述,加上相对时间偏移。
描述 | 示例 | 输出示例(假设当前时间为 2024-11-28) |
---|---|---|
YYYY-MM-DD +N days |
date -d "2024-11-01 +7 days" |
2024-11-08 |
HH:MM yesterday |
date -d "23:59 yesterday" |
2024-11-27 23:59 |
next WEEKDAY +N hours |
date -d "next Friday +12 hours" |
2024-11-29 12:00 |
date -d "2024-11-01 +7 days"
date -d "23:59 yesterday"
date -d "next Friday +12 hours"
ISO 8601 是国际标准的日期和时间表示法,date -d
支持以下格式:
格式 | 示例 | 描述 |
---|---|---|
YYYY-MM-DDTHH:MM:SS |
date -d "2024-11-28T14:30:45" |
标准 ISO 8601 格式。 |
YYYY-MM-DDTHH:MM:SSZ |
date -d "2024-11-28T14:30:45Z" |
带 Z 表示 UTC 时间。 |
date -d "2024-11-28T14:30:45"
date -d "2024-11-28T14:30:45Z"
timedatectl
工具常用选项和用途命令/选项 | 用途 | 示例 |
---|---|---|
-h , --help |
显示帮助信息。 | timedatectl --help |
--version |
显示 timedatectl 的版本信息。 |
timedatectl --version |
--no-pager |
禁止将输出通过分页器显示(如 less )。 |
timedatectl --no-pager status |
--no-ask-password |
禁止提示输入密码。 | timedatectl --no-ask-password set-time "2024-12-01 10:00:00" |
-H , --host=[USER@]HOST |
远程操作指定主机的时间设置(需要 ssh 权限)。 |
timedatectl [email protected] status |
-M , --machine=CONTAINER |
操作本地容器的时间设置。 | timedatectl --machine=my-container status |
--adjust-system-clock |
更改 RTC 模式时调整系统时钟。 | timedatectl --adjust-system-clock set-local-rtc 1 |
status |
显示当前的时间设置,包括本地时间、UTC 时间、RTC 时间、时区和 NTP 状态。 | timedatectl status |
set-time TIME |
设置系统时间(需要管理员限)。格式为 YYYY-MM-DD HH:MM:SS 。 |
timedatectl set-time "2024-12-01 10:00:00" |
set-timezone ZONE |
设置系统时区。时区名称可以通过 list-timezones 查看。 |
timedatectl set-timezone Asia/Shanghai |
list-timezones |
列出所有支持的时区名称。 | timedatectl list-timezones |
set-local-rtc BOOL |
控制硬件时钟(RTC)是否使用本地时间。BOOL 为 0 表示使用 UTC,1 表示使用本地时间。 |
timedatectl set-local-rtc 1 |
set-ntp BOOL |
启用或禁用 NTP(网络时间协议)同步。BOOL 为 true 表示启用,false 表示禁用。 |
timedatectl set-ntp true |
timedatectl
和date
适用场景对比功能 | date 命令 |
timedatectl 工具 |
---|---|---|
显示当前时间 | ✔ 显示当前时间。 | ✔ 显示当前时间、时区、NTP 状态、RTC 配置等。 |
设置系统时间 | ✔ 支持手动设置时间。 | ✔ 支持手动设置时间。 |
格式化输出时间 | ✔ 支持多种自定义格式化输出。 | ✘ 不支持格式化输出。 |
管理时区 | ✘ 不支持时区管理,需要通过环境变量 TZ 实现。 |
✔ 支持列出和设置时区。 |
NTP 时间同步 | ✘ 不支持 NTP 配置。 | ✔ 支持启用或禁用 NTP。 |
管理硬件时钟(RTC) | ✘ 不支持 RTC 配置。 | ✔ 支持配置 RTC 是否使用本地时间或 UTC。 |
脚本中的临时操作 | ✔ 更适合在脚本中快速处理时间。 | ✘ 不适合脚本中的时间格式化任务。 |
现代系统集成 | ✘ 仅限于单独运行,功能较简单。 | ✔ 与 systemd 集成,功能全面,适合现代系统。 |
Ending