Linux 从日期类型中减去1秒的Shell脚本

Linux 从日期类型中减去1秒的Shell脚本,linux,bash,shell,Linux,Bash,Shell,我有脚本从给定日期(YYYY-MM-DD)以HH:MM:SS格式生成两个日期:c 现在我需要从$enddate中减去n秒。我试着把时间转换成一个长的数字,然后做减法运算,再转换回原来的格式。有什么简单的方法可以做到这一点吗?我想我不清楚你对开始日期的日期的意思。。。 无论如何,date可以抓取并给出历元格式的日期,所以你应该很容易加上或减去一些秒 对于poc,请尝试以下操作: date=$(date +%s) ### now offset=300 #five minutes in seconds

我有脚本从给定日期(
YYYY-MM-DD
)以
HH:MM:SS
格式生成两个日期:c


现在我需要从
$enddate
中减去
n
秒。我试着把时间转换成一个长的数字,然后做减法运算,再转换回原来的格式。有什么简单的方法可以做到这一点吗?

我想我不清楚你对
开始日期
日期的意思。。。
无论如何,
date
可以抓取并给出历元格式的日期,所以你应该很容易加上或减去一些秒

对于poc,请尝试以下操作:

date=$(date +%s) ### now
offset=300 #five minutes in seconds
newdate=$((date + offset)) ### added 300 seconds
date=$(date --date="@$newdate" "+%Y-%m-%d %T") ### got the new date in whatever format I chose.

转换为long、减法和反转换是一种简单的方法。虽然如果您首先将日期生成为纪元时间可能会更容易,因此不需要进行初始转换。通常,日期和时间格式应始终以长格式存储,并且只有在呈现给人类时才转换为人类可读的格式。@Williampersell是对的。似乎不太可能需要以这种格式生成两个日期。也许您需要在某个时候以该格式显示生成的日期。只需将日期生成为从纪元开始的秒数,在需要时对其进行任何数学运算,并在需要时将其显示为YmdT。
date=$(date +%s) ### now
offset=300 #five minutes in seconds
newdate=$((date + offset)) ### added 300 seconds
date=$(date --date="@$newdate" "+%Y-%m-%d %T") ### got the new date in whatever format I chose.