如何使用该命令并给定时间戳来获取几天前的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
.