如何在Shell v4.1中从日期时间中减去7小时?含拆分场景
在Bash 4.1中处理日期时间减7小时的需求(日期与时间分开存储)
在Bash 4.1环境下,咱们可以借助GNU date命令轻松搞定这个需求——毕竟手动计算跨天的时间太容易出错,用工具才是最靠谱的选择。针对你这种日期、时间分开存储的场景,具体操作步骤如下:
步骤1:定义日期和时间变量
先把你的日期、时间字符串分别存到变量里,方便后续操作:
# 测试案例1 date_str="2018-03-20" time_str="21:00:00" # 测试跨天案例 # date_str="2018-03-20" # time_str="06:00:00"
步骤2:合并为完整的时间字符串
date命令需要识别完整的datetime格式,所以先把两个字符串拼接起来:
full_datetime="${date_str} ${time_str}"
步骤3:减去7小时并输出结果
用date命令的-d参数指定要处理的时间,加上-7 hours的偏移量,再通过+参数指定输出格式:
# 输出完整的新日期时间 new_full_datetime=$(date -d "${full_datetime} -7 hours" +"%Y-%m-%d %H:%M:%S") echo "处理后的完整时间:${new_full_datetime}"
运行这段代码,第一个测试案例会输出2018-03-20 14:00:00,跨天案例会输出2018-03-19 23:00:00,完全符合你的要求。
可选:拆分回单独的日期和时间变量
如果后续还需要把日期和时间分开存储,只需要分别指定输出格式即可:
new_date=$(date -d "${full_datetime} -7 hours" +"%Y-%m-%d") new_time=$(date -d "${full_datetime} -7 hours" +"%H:%M:%S") echo "新日期:${new_date}" echo "新时间:${new_time}"
注意事项
- 这个方法依赖GNU
date,Linux系统默认自带该版本;如果是BSD系统(比如macOS),date命令语法会有差异,但你使用的是Bash 4.1,大概率是Linux环境,无需担心。 - 确保你的日期时间格式是
date可识别的,你用的YYYY-MM-DD HH:MM:SS是标准格式,完全兼容。
内容的提问来源于stack exchange,提问作者Akshat Mathur
相关产品推荐
相关产品推荐

