date
命令用于 显示或设置系统日期和时间,支持灵活的时间格式化和计算。以下是常用场景与详细示例:
一、基本用法
1. 显示当前日期和时间
<BASH>
date
# 输出:Thu Jun 13 14:25:36 CST 2024
2. 设置系统时间(需root权限)
<BASH>
sudo date -s "2024-06-13 15:30:00"
# 设置时间为 2024年6月13日 15:30:00
二、格式化输出
1. 自定义日期格式
使用 +
开头指定格式符号:
<BASH>
date "+%Y-%m-%d %H:%M:%S"
# 输出:2024-06-13 14:25:36
2. 常用格式符号
符号 | 含义 | 示例 |
---|---|---|
%Y | 年份(4位) | 2024 |
%m | 月份(01-12) | 06 |
%d | 日(01-31) | 13 |
%H | 小时(00-23) | 14 |
%M | 分钟(00-59) | 25 |
%S | 秒(00-60) | 36 |
%A | 完整星期名称 | Thursday |
%a | 缩写星期名称 | Thu |
%B | 完整月份名称 | June |
%b | 缩写月份名称 | Jun |
3. 示例
<BASH>
date "+今天是 %Y 年 %m 月 %d 日,时间: %H 点 %M 分"
# 输出:今天是 2024 年 06 月 13 日,时间: 14 点 25 分
三、时区管理
1. 查看当前时区
<BASH>
date +"%Z %z"
# 输出:CST +0800 (表示东八区)
2. 临时切换时区
通过环境变量 TZ
临时修改时区:
<BASH>
TZ='America/New_York' date
# 输出纽约时间(比 UTC 晚4或5小时,夏令时不同)
3. 永久修改时区
<BASH>
sudo timedatectl set-timezone Asia/Shanghai # systemd 系统推荐方式
# 或传统方式(需创建软链接)
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
四、时间计算与特定日期处理
1. 显示过去/未来的时间
使用 -d
或 --date
参数:
<BASH>
date -d "tomorrow" # 明天此时
date -d "next week" # 下周此时
date -d "3 days ago" # 3天前
date -d "2023-12-31 +1 day" # 2024-01-01
2. 输出Unix时间戳
<BASH>
date +%s # 当前时间戳(秒)
date -d "@1672502400" +"%F %T" # 时间戳转日期:2023-01-01 00:00:00
五、实用场景
1. 生成备份文件名
<BASH>
backup_file="data-$(date +%Y%m%d-%H%M).tar.gz"
tar -czf $backup_file /path/to/data
2. 脚本中记录日志时间
<BASH>
echo "[$(date +"%F %T")] 任务开始执行..." >> script.log
六、常见问题
1. 权限不足导致时间设置失败
若提示 date: cannot set date: Operation not permitted
,需用 sudo
:
<BASH>
sudo date -s "新的时间"
2. 时区同步异常
安装并启用 NTP 服务自动同步网络时间:
<BASH>
sudo apt install ntp # Debian/Ubuntu
sudo systemctl enable ntpd # systemd 系统
总结:
date
是系统管理员和开发者的核心工具,适用于 时间管理、日志记录、任务调度。- 优先使用
timedatectl
管理时区(现代 Linux 系统)。 - 复杂时间计算可借助
-d
参数灵活实现。