菜鸟科技网

date命令有哪些核心用法?

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

date命令有哪些核心用法?-图1
(图片来源网络,侵删)

基础用法:显示当前时间

最简单的用法就是直接输入 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命令有哪些核心用法?-图2
(图片来源网络,侵删)

--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 权限,手动修改系统时间通常不是一个好习惯,应该使用 timedatectlntp/chrony 等工具进行时间同步。

要设置时间,需要使用 --set 选项(需要 sudo)。

date命令有哪些核心用法?-图3
(图片来源网络,侵删)
# 格式为 "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 用户和系统管理员的必备技能。

分享:
扫描分享到社交APP
上一篇
下一篇