shell linux日期--以分钟为单位递增当前日期,但防止溢出(超过午夜)

6g8kf2rb  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(157)

因此,我试图得到一个日期,1分钟到未来,但不允许午夜翻转,例如。

date -d "23:58:42 300 seconds" +%H:%M:%S

返回“00:03:42”,但是我希望它的上限为“23:59:59”。2有什么想法吗?

iqih9akk

iqih9akk1#

300秒不是一分钟,但是,最简单的方法就是编写一个简单的脚本:

#!/bin/bash
t="$1"
interval="$2"

h=$(date -d "$t $interval seconds" +%H)
if [ "$h" = "00" ] ; then
    echo "23:59:59"
else
    date -d "$t $interval seconds" +%H:%M:%S
fi

如果您的间隔时间在一小时以内,此方法效果很好。

rxztt3cl

rxztt3cl2#

请使用以下脚本进行尝试:

#!/bin/bash

secsToAdd=300
addendTime="23:58:42"

resultTime=$(date -d "$addendTime $secsToAdd seconds" +%H:%M:%S);
midnightTime="23:59:59"

addendTimeSeconds=$(echo "$addendTime" | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }');
midnightTimeSeconds=$(echo "$midnightTime" | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }');

if [[ "$secsToAdd" -gt $((midnightTimeSeconds-addendTimeSeconds)) ]]
then
    echo "$midnightTime"
else 
    echo "$resultTime"
fi

逻辑

如果Seconds to add > Midnight time - Addend time-〉,则存在溢出。

  • (无论要添加的秒数有多大,它都有效)。*

相关问题