Linux命令date全面介绍
作者:WangLanguager
date命令在Linux中用于显示和设置系统的日期和时间,它可以以多种方式被使用,包括显示当前的日期和时间,设置新的日期和时间,以及进行日期和时间的计算,下面是date命令的一些基本用法和详细介绍,感兴趣的朋友一起看看吧
date命令详细介绍
date 是 Linux 系统中用于显示 / 设置系统日期和时间的核心命令,支持自定义时间格式输出、时间戳转换、时区调整等,是脚本编写、日志记录、系统运维中最常用的工具之一。
一、命令基本信息
| 项 | 说明 |
|---|---|
| 作用 | 显示当前系统时间 / 日期,或设置系统时间(需 root 权限),支持格式定制、时间戳转换 |
| 归属包 | 核心工具包(coreutils),所有 Linux 发行版默认安装 |
| 权限要求 | 显示时间:普通用户即可;设置时间:仅 root/sudo 权限 |
| 语法 | date [选项] [+格式字符串](显示时间)date [选项] 时间字符串(设置时间) |
二、核心概念
- 系统时间 vs 硬件时间:
date操作的是系统时间(内核维护的时间);- 硬件时间(BIOS/CMOS 时间)需用
hwclock管理,可通过hwclock -s(硬件同步到系统)/hwclock -w(系统同步到硬件)关联。
- 时间戳:Unix 时间戳(Epoch Time),指从 1970-01-01 00:00:00 UTC 到当前的秒数(毫秒 / 微秒需额外参数)。
- 时区:默认使用系统时区(
/etc/localtime指向的时区文件),可通过TZ环境变量临时调整。
三、常用选项
1. 基础选项(显示 / 设置)
| 选项 | 说明 |
|---|---|
-d, --date=STRING | 显示指定时间字符串对应的时间(不修改系统时间),支持自然语言(如 yesterday) |
-s, --set=STRING | 设置系统时间为指定字符串(需 root,如 date -s "2025-12-06 10:00:00") |
-u, --utc, --universal | 显示 / 设置 UTC 时间(世界协调时间) |
-R, --rfc-2822 | 按 RFC 2822 格式输出(如 Sat, 06 Dec 2025 10:00:00 +0800) |
-I[TIMESPEC] | 按 ISO 8601 格式输出,TIMESPEC 可选 date/hours/minutes/seconds(如 -I 等价于 -Idate,输出 2025-12-06) |
--help | 显示帮助信息 |
--version | 显示版本信息 |
2. 格式控制符(核心,需加+前缀)
date 最常用的功能是通过格式字符串定制输出,格式符以 % 开头,常用如下:
| 格式符 | 说明 | 示例 |
|---|---|---|
%Y | 4 位年份 | 2025 |
%y | 2 位年份 | 25 |
%m | 2 位月份(01-12) | 12 |
%d | 2 位日期(01-31) | 06 |
%H | 24 小时制小时(00-23) | 10 |
%I | 12 小时制小时(01-12) | 10 |
%M | 分钟(00-59) | 05 |
%S | 秒(00-60,60 为闰秒) | 30 |
%s | Unix 时间戳(秒) | 1733493930 |
%N | 纳秒(000000000-999999999) | 123456789 |
%A | 星期全称 | Saturday |
%a | 星期缩写 | Sat |
%B | 月份全称 | December |
%b | 月份缩写 | Dec |
%Z | 时区缩写 | CST(中国标准时间) |
%z | 时区偏移(±HHMM) | +0800 |
%F | 等价于 % Y-% m-% d(ISO 日期) | 2025-12-06 |
%T | 等价于 % H:% M:% S(24 小时制时间) | 10:05:30 |
%c | 系统默认的日期时间格式 | Sat Dec 6 10:05:30 2025 |
四、典型用法示例
1. 基础显示(默认格式)
# 示例输出:Sat Dec 6 10:05:30 CST 2025
2. 自定义格式输出(高频)
# 1. 按「年-月-日 时:分:秒」输出 date +"%Y-%m-%d %H:%M:%S" # 输出:2025-12-06 10:05:30 # 2. 简化版(%F=%Y-%m-%d,%T=%H:%M:%S) date +"%F %T" # 输出:2025-12-06 10:05:30 # 3. 带星期和时区 date +"%Y-%m-%d %A %H:%M:%S %Z" # 输出:2025-12-06 Saturday 10:05:30 CST # 4. 仅显示日期 date +%F # 输出:2025-12-06 # 5. 仅显示时间 date +%T # 输出:10:05:30
3. 时间戳转换(核心实用功能)
# 1. 当前时间转时间戳(秒) date +%s # 输出:1733493930 # 2. 时间戳转回可读时间(示例:1733493930) date -d @1733493930 # 输出:Sat Dec 6 10:05:30 CST 2025 # 3. 时间戳转自定义格式 date -d @1733493930 +"%Y-%m-%d %H:%M:%S" # 输出:2025-12-06 10:05:30 # 4. 带毫秒的时间戳(需组合 %s 和 %N) date +"%s.%N" # 输出:1733493930.123456789
4. 显示相对时间(自然语言解析)
-d 选项支持自然语言描述的时间,无需手动计算,适合脚本:
# 1. 昨天的时间 date -d "yesterday" +"%F %T" # 输出:2025-12-05 10:05:30 # 2. 明天的时间 date -d "tomorrow" +"%F %T" # 输出:2025-12-07 10:05:30 # 3. 1小时前 date -d "1 hour ago" +"%F %T" # 输出:2025-12-06 09:05:30 # 4. 3天后 date -d "3 days later" +"%F %T" # 输出:2025-12-09 10:05:30 # 5. 指定日期的下周一 date -d "2025-12-06 next Monday" +"%F" # 输出:2025-12-08 # 6. 上个月的今天 date -d "last month" +"%F" # 输出:2025-11-06
5. 时区切换
# 1. 临时切换为 UTC 时间(仅当前命令生效) date -u # 输出:Sat Dec 6 02:05:30 UTC 2025 # 2. 切换为纽约时区(EST) TZ="America/New_York" date # 输出:Sat Dec 6 01:05:30 EST 2025 # 3. 列出系统支持的时区:ls /usr/share/zoneinfo/
6. 设置系统时间(需 root)
# 1. 设置为指定日期时间 sudo date -s "2025-12-06 10:00:00" # 2. 仅设置日期(时间不变) sudo date -s "2025-12-06" # 3. 仅设置时间(日期不变) sudo date -s "10:00:00" # 4. 设置后同步到硬件时间(避免重启失效) sudo hwclock -w
7. 按 RFC/ISO 标准输出
# RFC 2822 格式(邮件/日志常用) date -R # 输出:Sat, 06 Dec 2025 10:05:30 +0800 # ISO 8601 格式(含秒) date -Iseconds # 输出:2025-12-06T10:05:30+08:00
五、高级场景(脚本 / 运维)
1. 生成带时间戳的日志文件名
# 创建格式为「log_20251206_100530.txt」的文件 touch log_$(date +%Y%m%d_%H%M%S).txt
2. 计算两个时间的差值(秒)
# 示例:计算「2025-12-06」与「2025-12-01」的天数差(转秒后除以86400) start=$(date -d "2025-12-01" +%s) end=$(date -d "2025-12-06" +%s) diff=$(( (end - start) / 86400 )) echo "差值:$diff 天" # 输出:差值:5 天
3. 定时任务中记录执行时间
# 脚本中记录开始/结束时间 echo "任务开始时间:$(date +"%F %T")" # 执行任务... echo "任务结束时间:$(date +"%F %T")"
六、注意事项
- 权限限制:设置系统时间必须用
root或sudo,普通用户执行date -s会报错date: cannot set date: Operation not permitted; - 时区配置:系统默认时区由
/etc/localtime软链接控制(如指向/usr/share/zoneinfo/Asia/Shanghai),可通过timedatectl set-timezone Asia/Shanghai永久修改; - 闰秒处理:
%S可能输出 60(闰秒),脚本中需注意数值范围; - 时间同步:生产环境不建议手动改时间,推荐用
ntpdate或chronyd同步网络时间(如sudo ntpdate pool.ntp.org); - 自然语言兼容:
-d支持的自然语言(如yesterday/next week)依赖系统语言(LANG),建议设置LANG=en_US.UTF-8避免解析失败。
七、相关命令
hwclock:管理硬件时间(BIOS 时间);timedatectl:systemd 系统中管理时间 / 时区的工具(替代date/hwclock的部分功能);ntpdate/chronyd:同步网络时间;cal:显示日历(可配合date使用)。
到此这篇关于Linux命令date 详细介绍的文章就介绍到这了,更多相关linux命令date 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
