在Linux系统中,
date
是一个用于显示或设置系统日期和时间的基本命令。它功能强大且灵活,支持多种格式化和计算操作。通过灵活组合这些选项,date
命令可以满足日志记录、定时任务、备份等场景的需求。以下是date
命令的详细解析:
目录
3、Unix时间戳(英文为Unix epoch,Unix time,POSIX time或Unix timestamp)是从1970年1月1 日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒 。
一、基本用法
显示当前日期和时间
date
输出示例:(格式为:星期 月 日 时:分:秒 时区 年
)
二、格式化输出
通过 +
指定格式字符串,自定义输出格式(重点)
常用格式符
符号 | 说明 | 示例(输出) |
---|---|---|
%Y | 4位年份 | 2023 |
%m | 月份(01-12) | 06 |
%d | 日(01-31) | 28 |
%H | 24小时制小时 | 15 |
%M | 分钟(00-59) | 30 |
%S | 秒(00-59) | 45 |
%A | 完整星期名 | Monday |
%B | 完整月份名 | June |
%F | 日期(等价于 %Y-%m-%d ) | 2023-06-28 |
%T | 时间(等价于 %H:%M:%S ) | 15:30:45 |
示例
date "+%Y-%m-%d %H:%M:%S"
输出:
date "+Today is %A, %B %d"
输出:
三、基本选项
1、-d, --date=STRING
解释:解析指定的时间字符串(而不是当前时间),并按照给定格式输出。
示例:
date -d "2024-01-01" # 显示指定日期的默认格式
date -d "next Friday" # 显示下周五的日期
date -d "2 days ago" "+%F" # 显示两天前的日期(YYYY-MM-DD)
2、-s, --set=STRING
解释:设置系统时间(需 root
权限)。
示例:
sudo date -s "2025-06-28 12:13:00" # 设置日期和时间
sudo date -s "18:14:00" # 仅设置时间(日期不变)
3、-u, --utc, --universal
解释:显示或设置 UTC(协调世界时)时间,而非本地时间。(中国时间:UTC+8小时)
示例:
date -u # 显示当前 UTC 时间
date -u "+%Y-%m-%d %H:%M:%S" # 格式化 UTC 时间
4、-r, --reference=FILE
解释:显示指定文件的最后修改时间。
示例:
date -r filename.txt # 显示 /etc/passwd 的最后修改时间
date -r filename.txt "+%F %T" # 格式化输出
四、设置系统时间
sudo date -s "2023-06-28 15:30:00"
或(由于上面输入过密码了,所以这次不用输入密码)
sudo date 062815302023.00 # 格式:MMDDhhmmYYYY.ss
1)date -s 设置当前时间,只有root用户才能设置,普通用户只能查看。
2)date -s 20250628 将时间设置为20250628,这样会将具体时间设置为空(00:00:00)。
3)date -s 01:01:01 设置具体时间,不会对日期做更改。
4)date -s “01:01:01 2025-06-28” 同时设置日期和具体时间。
5)date -s “01:01:01 20250628” 同时设置日期和具体时间。
6)date -s “2025-06-28 01:01:01” 同时设置日期和具体时间。
7)date -s “2025062801:01:01” 同时设置日期和具体时间。
五、时间计算
相对时间加减
date -d "now + 1 day" # 明天此时
date -d "next Monday" # 下周一
date -d "2 hours ago" # 2小时前
date -d "30 seconds" # 30秒后的时间
示例
date -d "yesterday" "+%F"
输出:
六、显示其他时区时间
TZ='America/New_York' date
或使用UTC时间:
date -u
七、时间戳转换
1、将日期转为时间戳(秒)
date -d "2023-06-28 15:30:00" +%s
输出:
2、将时间戳转为日期
date -d @1687937400 "+%F %T"
输出:
3、Unix时间戳(英文为Unix epoch,Unix time,POSIX time或Unix timestamp)是从1970年1月1 日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒 。
八、实用技巧
1、生成文件名带日期
tar -czf backup_$(date +%Y%m%d_%H%M).tar.gz /data
结果:将/data
目录压缩打包成一个名为backup_年月日_时分.tar.gz
的文件。
2、计算命令执行时间
start=$(date +%s)
# 执行某些命令...
end=$(date +%s)
echo "耗时:$((end - start))秒"
九、常见问题
-
权限不足:修改时间需使用
sudo
。 -
时区问题:若时间不对,检查时区设置(
timedatectl
或tzselect
)。 -
格式无效:确保格式符大小写正确(如
%M
分钟,%m
月份)。