![尝试在 bash 中将 X 小时添加到任意日期](https://linux22.com/image/204988/%E5%B0%9D%E8%AF%95%E5%9C%A8%20bash%20%E4%B8%AD%E5%B0%86%20X%20%E5%B0%8F%E6%97%B6%E6%B7%BB%E5%8A%A0%E5%88%B0%E4%BB%BB%E6%84%8F%E6%97%A5%E6%9C%9F.png)
给定这样的日期字符串:2022-03-28T23:40:49.721Z
我正在尝试增加 X 小时。
该函数看起来类似于
addHours()
{
dateString=$1
hours=$2
return date -d 'dateString + $hours hours' +'%Y-%m-%dT%H:%M:%S.%NZ'
}
我的问题是“T”引起问题,并且我不断遇到无效的日期结构
答案1
在 Unix 中这是有效的:
date -d '2022-03-28T23:40:49.721Z +6 hours' +'%Y:%m:%dT%H:%M:%S.%NZ'
但在 Mac 上,我需要转换为时间戳,进行数学计算,然后转换回来:
dateFormatter()
{
date -jf "%s" $1 +"%Y-%m-%dT%H:%M:%SZ"
}
dateAddTime()
{
ds=$1
echo $ds
# remove nano seconds
ds=`echo "${ds/\.[0-9][0-9][0-9]/}"`
#convert to timestamp
ts=`date -jf %Y-%m-%dT%H:%M:%SZ $ds +%s`
#time in hours
seconds=$2*60*60
dateFormatter $(($ts + $seconds))
}
#add 6 hours
dateAddTime 2022-03-28T23:40:49.721Z 6
注意:MacOS 不喜欢纳秒,因此必须将其删除。