在Linux系统中,获取年月日信息是日常运维和脚本开发中的常见需求,可通过多种方式实现,涵盖命令行工具、Shell脚本及系统接口等,以下是详细方法和示例。

命令行工具直接获取
date命令(最常用)
date是Linux系统时间管理的核心命令,支持通过格式化参数提取年月日,常用格式化符号包括:
示例:
# 获取当前年月日(标准格式) date +%F # 输出:2023-10-15 # 分别获取年、月、日 date +%Y # 输出:2023 date +%m # 输出:10 date +%d # 输出:15 # 获取特定格式日期(如年月日连接) date +%Y%m%d # 输出:20231015 # 获取昨天日期 date -d "yesterday" +%F # 输出:2023-10-14
cal命令(日历辅助)
cal命令主要用于显示日历,可通过参数获取指定年月的信息,间接提取年月日。
示例:
# 显示当前月份日历(含年月标记)
cal # 输出:当前月份日历,顶部显示"October 2023"
# 显示指定年份日历(如2023年)
cal 2023 # 输出:2023年全年日历
# 获取当前年月(结合awk提取)
cal | head -1 | awk '{print $2,$3}' # 输出:October 2023
Shell脚本中动态获取
在Shell脚本中,通常通过命令替换($(command))将date命令的输出赋值给变量,实现年月日的动态处理。
基础变量赋值
#!/bin/bash # 获取当前年月日并赋值 current_date=$(date +%F) current_year=$(date +%Y) current_month=$(date +%m) current_day=$(date +%d) echo "当前日期:$current_date" echo "年份:$current_year,月份:$current_month,日期:$current_day"
输出:

当前日期:2023-10-15
年份:2023,月份:10,日期:15
循环处理日期范围
若需批量处理某年某月的所有日期,可通过date结合循环实现:
#!/bin/bash
# 遍历2023年10月的所有日期
year=2023
month=10
days_in_month=$(cal $month $year | tail -1 | awk '{print $NF}') # 获取当月天数
for day in $(seq -w 1 $days_in_month); do
echo "$year-$month-$day"
done
输出:
2023-10-01
2023-10-02
...
2023-10-31
系统接口与工具
/proc文件系统(硬件时钟)
/proc/driver/rtc记录了硬件时钟(RTC)的实时信息,可通过解析该文件获取日期:
# 提取硬件时钟日期(格式:YYYY-MM-DD)
cat /proc/driver/rtc | grep date | awk '{print $3}'
注意:硬件时钟可能与系统时间不同步,需通过hwclock --hctosync同步。
hwclock命令(硬件时钟操作)
hwclock用于读取/设置硬件时钟,支持格式化输出日期:

# 获取硬件时钟当前日期(标准格式)
hwclock --date='%Y-%m-%d' # 需结合`--show`参数,实际为:hwclock --show | awk '{print $1}'
方法对比总结
| 方法类别 | 常用命令 | 主要用途 | 示例命令 |
|---|---|---|---|
| 命令行工具 | date | 获取/格式化当前系统时间 | date +%F |
| 命令行工具 | cal | 显示日历,辅助获取年月信息 | cal 2023 10 |
| Shell脚本 | $(date) | 在脚本中获取日期变量 | YEAR=$(date +%Y) |
| 系统接口 | /proc/driver/rtc | 获取硬件时钟日期 | cat /proc/driver/rtc |
相关问答FAQs
Q1:如何获取昨天的年月日?
A:使用date命令的-d参数处理相对时间,
date -d "yesterday" +%F # 输出昨天的日期(如2023-10-14)
若需更灵活的相对时间计算(如“3天前”),可修改参数为-d "3 days ago"。
Q2:如何获取系统启动时的年月日?
A:系统启动时间存储在/proc/uptime(秒数)和/proc/stat中,需结合date计算:
# 获取系统启动时间戳(秒数)
uptime_seconds=$(cat /proc/uptime | awk '{print $1}')
# 获取当前时间戳并减去启动时间,得到启动时刻的时间戳
boot_timestamp=$(date +%s -d "now - $uptime_seconds seconds")
# 格式化输出启动日期
date -d @$boot_timestamp +%F
此方法适用于需要记录系统启动日期的场景(如日志分析)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/36544.html