下面我将从基础到高级,全面地介绍 date 命令的用法。

基础用法:显示当前时间
最简单的用法就是直接输入 date,它会按照默认的格式显示当前系统的日期和时间。
$ date # 输出示例(格式可能因系统而异,通常是 "星期 月 日 时间 时区 年") Wed Oct 26 10:30:55 CST 2025
自定义格式化输出
这是 date 命令最强大的功能之一,你可以使用 号加上特定的格式化字符串来控制输出的格式。
常用格式化字符
| 格式化字符 | 描述 | 示例 |
|---|---|---|
%Y |
4位数的年份 | 2025 |
%y |
2位数的年份 | 23 |
%m |
2位数的月份 (01-12) | 10 |
%d |
2位数的日期 (01-31) | 26 |
%F |
完整的日期,等价于 %Y-%m-%d |
2025-10-26 |
%H |
24小时制的小时 (00-23) | 10 |
%M |
分钟 (00-59) | 30 |
%S |
秒 (00-60) | 55 |
%T |
时间,等价于 %H:%M:%S |
10:30:55 |
%s |
自 Unix 纪元(1970-01-01 00:00:00 UTC)以来的秒数 | 1698322255 |
%A |
完整的星期名称 | Wednesday |
%a |
缩写的星期名称 | Wed |
%B |
完整的月份名称 | October |
%b 或 %h |
缩写的月份名称 | Oct |
%p |
AM 或 PM (用于 12 小时制) | AM |
%j |
一年中的第几天 (001-366) | 299 |
%w |
一周中的第几天 (0代表周日, 6代表周六) | 3 |
%W |
一年中的第几周 (以周一开始) | 43 |
%Z |
时区名称 | CST |
使用示例
# 显示 "年-月-日" 格式 $ date +%F 2025-10-26 # 显示 "年/月/日 时:分:秒" 格式 $ date +"%Y/%m/%d %H:%M:%S" 2025/10/26 10:30:55 # 显示 "时:分:秒" 并在后面加上 "AM/PM" $ date +"%r %p" 10:30:55 AM # 显示 "月日, 年" 格式 $ date +"%B %d, %Y" October 26, 2025 # 显示 Unix 时间戳 $ date +%s 1698322255
注意: 当使用 时,如果要在输出中包含普通字符(如 , , 等),最好用双引号 将整个格式字符串括起来,以避免 Shell 误解。
显示指定日期和时间
你可以使用 date 命令来显示任意特定时间点的日期,而不仅仅是当前时间,这通过 --date (或其简写 -d) 选项实现。

--date 选项非常智能,可以理解多种自然语言描述的时间。
基本用法
# 显示昨天的日期 $ date --date="yesterday" Tue Oct 25 10:30:55 CST 2025 # 显示明天的日期 $ date --date="tomorrow" Thu Oct 27 10:30:55 CST 2025 # 显示一周后的日期 $ date --date="next week" Wed Nov 02 10:30:55 CST 2025 # 显示 "3天后" 的日期 $ date --date="3 days" Sat Oct 28 10:30:55 CST 2025 # 显示 "2年前" 的日期 $ date --date="2 years ago" Mon Oct 26 10:30:55 CST 2025
指定具体日期字符串
# 显示 2025 年 1 月 1 日的日期 $ date -d "2025-01-01" Mon Jan 1 00:00:00 CST 2025 # 显示美国独立日 (July 4th, 1776) $ date -d "1776-07-04" Thu Jul 4 00:00:00 EDT 1776
结合格式化使用
这是最常见的用法之一,比如获取昨天的日期并格式化输出。
# 获取昨天的日期,格式为 "年-月-日" $ date -d "yesterday" +%F 2025-10-25 # 获取上个月的最后一天 $ date -d "last day of last month" +%F 2025-09-30
设置系统时间
⚠️ 警告: 普通用户通常没有权限修改系统时间。date 命令修改时间需要 root 权限,手动修改系统时间通常不是一个好习惯,应该使用 timedatectl 或 ntp/chrony 等工具进行时间同步。
要设置时间,需要使用 --set 选项(需要 sudo)。

# 格式为 "MMDDhhmm[[CC]YY][.ss]" # MM: 月, DD: 日, hh: 小时, mm: 分钟, CC: 世纪, YY: 年, ss: 秒 # 示例:将时间设置为 2025年5月20日 15:30:00 $ sudo date --set="202505202530.00"
时间计算
date 命令结合 --date 选项可以进行一些简单的时间计算,这在 shell 脚本中非常有用。
计算未来或过去的时间
# 计算 1 小时后的时间 $ date -d "1 hour" Wed Oct 26 11:30:55 CST 2025 # 计算 30 分钟前的时间 $ date -d "30 minutes ago" Wed Oct 26 10:00:55 CST 2025
计算两个日期之间的时间差
这通常需要一些技巧,一个常见的方法是将两个日期都转换为 Unix 时间戳,然后相减。
# 定义两个日期 date1="2025-01-01" date2="2025-10-26" # 将日期转换为时间戳并计算差值(单位:秒) diff_seconds=$(($(date -d "$date2" +%s) - $(date -d "$date1" +%s))) # 将秒数转换为天数 diff_days=$((diff_seconds / 86400)) echo "从 $date1 到 $date2 相隔 $diff_days 天" # 输出: 从 2025-01-01 到 2025-10-26 相隔 299 天
高级技巧与实用案例
案例1:获取文件的创建时间
# 假设有一个文件 my_file.txt
touch my_file.txt
# 使用 stat 命令查看文件状态,Birth 时间就是创建时间
$ stat my_file.txt
File: my_file.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 131075 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ myuser) Gid: ( 1000/ myuser)
Access: 2025-10-26 10:35:55.123456789 +0800
Modify: 2025-10-26 10:35:55.123456789 +0800
Change: 2025-10-26 10:35:55.123456789 +0800
Birth: 2025-10-26 10:35:55.123456789 +0800 # 这就是创建时间
# 使用 date 格式化输出创建时间
$ stat -c %w my_file.txt | xargs -I {} date -d "{}" +"%Y-%m-%d %H:%M:%S"
2025-10-26 10:35:55
案例2:在脚本中动态生成带时间戳的文件名
这是 date 命令最常见的脚本应用之一。
# 创建一个以 "backup_年-月-日_时-分-秒.txt" 命名的文件 filename="backup_$(date +%F_%H-%M-%S).txt" echo "This is a backup file." > "$filename" echo "Created file: $filename" # 输出: Created file: backup_2025-10-26_10-35-55.txt
案例3:检查脚本运行耗时
#!/bin/bash # 记录开始时间 start_time=$(date +%s) # 模拟一个耗时任务 sleep 2 # 记录结束时间 end_time=$(date +%s) # 计算耗时 elapsed_time=$((end_time - start_time)) echo "脚本执行耗时: $elapsed_time 秒"
| 功能 | 命令示例 | 描述 |
|---|---|---|
| 显示当前时间 | date |
默认格式显示 |
| 格式化显示 | date +"%Y-%m-%d" |
按指定格式显示 |
| 显示特定时间 | date -d "yesterday" |
显示昨天的日期时间 |
| 设置系统时间 | sudo date --set="202505202530" |
需要root权限 |
| 时间计算 | date -d "1 hour" |
计算一小时后的时间 |
| 时间戳转换 | date -d "@1698322255" |
将时间戳转换为可读格式 |
| 生成文件名 | file_$(date +%s).log |
生成带时间戳的文件名 |
掌握 date 命令的用法,特别是自定义格式化和 --date 选项,是每个 Linux 用户和系统管理员的必备技能。
