Bash中如何从date日期对象减去指定小时数计算目标时间
计算前一个午夜往前推X小时的对应时间
直接用GNU date的多规则时间解析能力就能实现,不需要拆分步骤做二次计算。
可直接运行的实现
# 替换成你需要往前推的小时数即可 x=4 date -d "today 00:00 -${x} hours"
如果你要沿用之前获取午夜时间的写法,只需要在后面追加小时偏移规则就行:
x=4 date -d "yesterday 23:59:59 -${x} hours"
当x取值为4时,上述命令的输出和预期完全一致:
Mon Jul 10 20:00:00 CEST 2022
补充说明
- date命令支持拼接多个时间描述规则,会自动按规则顺序完成时间偏移计算,不需要先单独取出午夜时间再做二次运算
- 用
today 00:00表示前一个午夜语义更清晰,和yesterday 23:59:59的解析结果完全一致,还能避免秒级精度带来的潜在误差 - 如果需要调整偏移单位,把
hours替换成minutes/days/seconds即可,数值前加负号代表往前推,不加代表往后算
内容的提问来源于stack exchange,提问作者Esben Eickhardt
相关产品推荐
相关产品推荐

