Linux系统中经常需要查看当前时间、生成指定格式的时间字符串、进行日期计算或在脚本中记录日志。date命令作为Linux环境下最常用的时间处理工具之一,功能十分强大,不仅可以显示系统当前时间,还支持自定义输出格式、时间转换、时间偏移计算等操作。
掌握Linux中的date命令,对于系统管理、Shell脚本开发、日志分析以及自动化任务编写都有重要作用。
一、Linux date命令基本介绍
date是Linux系统自带的日期时间管理命令,用于显示或设置系统日期和时间。
基本语法如下:
Bashdate [选项] [+格式化字符串]
最简单的使用方式:
Bashdate
执行后会输出当前系统时间,例如:
Sat Oct 4 08:42:10 CST 2026
默认显示内容通常包括:
-
星期
-
月份
-
日期
-
时间
-
时区
-
年份
例如:
Sat Oct 4 08:42:10 CST 2026
表示:
-
Sat:星期六
-
Oct:10月
-
4:日期
-
08:42:10:当前时间
-
CST:中国标准时间
-
2026:年份
二、使用date查看指定格式的当前时间
Linux中date命令最大的特点是支持格式化输出,通过+格式字符串可以控制时间显示方式。
例如:
Bashdate "+%Y-%m-%d %H:%M:%S"
输出:
2026-10-04 08:42:10
这种格式非常常用于:
-
日志文件命名
-
数据备份脚本
-
程序运行记录
-
自动化任务
三、date常用时间格式参数详解
Linux date格式化主要通过百分号开头的参数实现。
常见参数如下:
| 参数 | 含义 | 示例 |
|---|---|---|
%Y | 四位年份 | 2026 |
%y | 两位年份 | 26 |
%m | 月份 | 10 |
%d | 日期 | 04 |
%H | 小时(24小时制) | 08 |
%I | 小时(12小时制) | 08 |
%M | 分钟 | 42 |
%S | 秒 | 10 |
%a | 星期简称 | Sat |
%A | 星期全称 | Saturday |
%b | 月份简称 | Oct |
%B | 月份全称 | October |
%s | Unix时间戳 | 1791074530 |
%F | 完整日期格式 | 2026-10-04 |
%T | 时间格式 | 08:42:10 |
其中:
Bash%F
等价于:
Bash%Y-%m-%d
而:
Bash%T
等价于:
Bash%H:%M:%S
四、常见date格式化示例
1. 查看年月日
Bashdate "+%Y-%m-%d"
结果:
2026-10-04
2. 查看完整日期时间
Bashdate "+%Y-%m-%d %H:%M:%S"
结果:
2026-10-04 08:42:10
3. 查看当前时间戳
Unix时间戳表示从1970年1月1日00:00:00 UTC开始计算的秒数。
执行:
Bashdate "+%s"
输出:
1791074530
4. 查看星期信息
Bashdate "+%A"
输出:
Saturday
5. 自定义日志时间格式
例如:
Bashdate "+[%Y-%m-%d %H:%M:%S]"
输出:
[2026-10-04 08:42:10]
常用于Shell脚本:
Bashecho "$(date '+%Y-%m-%d %H:%M:%S') backup completed"
输出:
2026-10-04 08:42:10 backup completed
五、date获取昨天、明天等时间
Linux date支持时间偏移计算,可以快速获取相对日期。
获取昨天日期
Bashdate -d "yesterday" "+%Y-%m-%d"
输出:
2026-10-03
获取明天日期
Bashdate -d "tomorrow" "+%Y-%m-%d"
输出:
2026-10-05
获取指定天数之前的日期
例如获取7天前:
Bashdate -d "7 days ago" "+%Y-%m-%d"
结果:
2026-09-27
获取未来30天日期
Bashdate -d "+30 days" "+%Y-%m-%d"
结果:
2026-11-03
六、date处理指定日期
除了查看当前时间,date还可以解析指定日期。
例如:
Bashdate -d "2026-01-01"
输出:
Thu Jan 1 00:00:00 CST 2026
格式化输出:
Bashdate -d "2026-01-01" "+%Y-%m-%d %A"
结果:
2026-01-01 Thursday
七、时间戳与日期互相转换
在开发和运维环境中,经常需要时间戳和普通日期之间转换。
时间转Unix时间戳
Bashdate "+%s"
例如:
1791074530
Unix时间戳转换日期
使用:
Bashdate -d "@1791074530"
输出:
Sat Oct 4 08:42:10 CST 2026
指定格式:
Bashdate -d "@1791074530" "+%Y-%m-%d %H:%M:%S"
输出:
2026-10-04 08:42:10
八、date命令在Shell脚本中的应用
1. 生成备份文件名
例如每天生成带日期的备份文件:
Bash#!/bin/bash backup="database_$(date '+%Y%m%d').sql" echo $backup
输出:
database_20261004.sql
2. 计算脚本执行耗时
记录开始时间:
Bashstart=$(date +%s)
执行任务:
Bashsleep 5
结束时间:
Bashend=$(date +%s)
计算:
Bashecho "耗时:$((end-start))秒"
输出:
耗时:5秒
3. 自动生成日志文件
例如:
Bashlog="app_$(date '+%Y%m%d_%H%M%S').log"
生成:
app_20261004_084210.log
适合程序运行日志、定时任务日志管理。
九、date设置系统时间
除了查看时间,date也可以修改系统时间。
例如:
Bashdate -s "2026-10-04 09:00:00"
执行后系统时间会被调整。
不过在生产环境中修改系统时间需要谨慎,因为可能影响:
-
数据库时间记录
-
日志排序
-
定时任务执行
-
集群时间同步
现代Linux服务器通常使用:
-
NTP
-
chrony
-
systemd-timesyncd
进行自动时间同步。
十、Linux date与timedatectl配合使用
在较新的Linux发行版中,可以使用timedatectl查看时间同步状态。
执行:
Bashtimedatectl
示例:
Local time: Sat 2026-10-04 08:42:10 CST Universal time: Sat 2026-10-04 00:42:10 UTC Time zone: Asia/Shanghai System clock synchronized: yes
如果发现date显示时间异常,可以优先检查:
Bashtimedatectl status
确认:
-
时区是否正确
-
时间同步是否开启
-
系统时间是否准确
十一、date命令常见问题
1. date显示时间与实际不一致
可能原因:
-
系统时区错误
-
NTP同步异常
-
虚拟机时间漂移
检查时区:
Bashtimedatectl
修改时区:
Bashtimedatectl set-timezone Asia/Shanghai
2. date -d参数无法使用
部分系统中的date版本不同。
例如:
GNU Linux:
Bashdate -d "tomorrow"
支持。
但macOS默认date不支持-d参数,需要使用:
Bashdate -v+1d
因此编写跨平台脚本时需要注意系统差异。
3. Shell中变量引用问题
错误:
Bashdate +%Y-%m-%d
在某些场景中可能被Shell解析。
推荐:
Bashdate "+%Y-%m-%d"
或者:
Bashdate '+%Y-%m-%d'
避免特殊字符产生影响。
十二、Linux date命令使用技巧总结
日常Linux运维和开发中,以下命令使用频率较高:
查看当前时间:
Bashdate
标准日期时间:
Bashdate "+%F %T"
生成时间戳:
Bashdate +%s
查看昨天:
Bashdate -d yesterday
查看指定日期:
Bashdate -d "2026-01-01"
生成备份时间:
Bashdate "+%Y%m%d_%H%M%S"
Linux中的date命令虽然简单,但在服务器管理、自动化脚本、日志分析和程序开发中具有非常重要的作用。熟练掌握格式化参数、时间计算以及时间戳转换方法,可以显著提高Linux环境下的工作效率。