尝试在 bash 中将 X 小时添加到任意日期

尝试在 bash 中将 X 小时添加到任意日期

给定这样的日期字符串: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 不喜欢纳秒,因此必须将其删除。

相关内容