Linux给定一个时间戳,如何获取X天前的时间戳?

Linux给定一个时间戳,如何获取X天前的时间戳?

如何使用该命令并给定时间戳来获取几天前的date时间戳。X例如 UTC 时间戳是1525192000,我想获取30在此之前的 UTC 时间戳。

答案1

首先,我假设您的时间戳是自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数,如果不是,请将其转换为该时间戳。

因此,您必须减去所需天数的秒数。

stamp=1525192000
day=$((60*60*24))
echo $(($stamp - 30*$day))

然后你会得到一个 Unix 纪元时间,如果需要转换为日期和时间,你可能需要考虑 DST,这就是你可能需要使用该date实用程序的地方。

请注意,您也可以使用date.这使您可以轻松使用其他日期元素,无需计算:

使用 GNU date

date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s

例子:

 $ date --date="$(date --iso-8601=s -d @1525192000)"
 Tue, May  1, 2018  7:06:01 PM
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days"
 Wed, Apr 1, 2018  7:06:01 PM
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s
 1523466380
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days -1 week -3 months" +%s
 1514309200

在 FreeBSD 和 macOS 中(该-j方法不会尝试设置系统日期,很好且安全)

date -j -f "%a %b %d %T %Z %Y" "$(date -r 1234567890)"  -v-30d "+%s"

编辑:谢谢,Kusalananda、OpenBSD 和 NetBSD 不支持-v.

相关内容