Linux Shell 脚本中 date 命令常用用法
在运维和自动化脚本开发中,处理时间日期是高频需求。GNU coreutils 提供的 date 命令功能强大,支持格式化输出和时间算术运算。下面整理了一些实用场景和注意事项。
基础格式与当前时间
获取当前时间并指定格式是最基本的操作。注意参数顺序,通常先写格式,再写 -d 选项。
date +%Y%m%d
这会输出类似 20231027 的结果。如果需要包含时分秒:
date "+%Y-%m-%d %H:%M:%S"
时间加减运算
date 命令通过 -d 参数配合相对时间描述符进行计算。常见的描述符包括 day, month, year 等。
# 显示明天的日期
date -d "+1 day" +%Y%m%d
# 显示昨天的日期
date -d "-1 day" +%Y%m%d
# 显示上个月的第一天
date -d "last month" +%Y%m
这里有个细节:正数表示未来,负数表示过去。月份和年份的计算可能会遇到月末边界问题,例如从 1 月 31 日加一个月,结果通常是 2 月 28 日或 29 日,具体取决于系统实现。
转换特定日期格式
如果你有一个固定日期字符串,想转换成另一种格式,可以这样写:
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
输出示例:2009/12/12 00:00.00
获取上月末日期
这是一个经典场景,也是实际业务中常用的逻辑。思路是先找到下个月的第一天,然后减去一天。
# 方法一:利用相对时间
date -d "$(date +%Y%m01) -1 day" +%Y%m%d
或者更稳健的写法,避免变量拼接带来的空格问题:
echo $(date -d "$(date +%Y%m01) -1 day" +%Y%m%d)
注意:%y 是小写两位年份,建议统一使用大写 %Y 四位年份以防跨世纪歧义。

