我有一个自 1970-01-01 00:00:00 UTC 以来以秒表示的时间,例如1524884843
.
我想获取时间,比如说,距离上面指定时间1个月的时间。
通常如果我想获得从现在开始1个月后的时间,我可以使用...
root@beaglebone:~/bbbrtc# date
Sat Apr 28 03:12:54 UTC 2018
root@beaglebone:~/bbbrtc# date -d "now+1 month"
Mon May 28 03:12:57 UTC 2018
-d
我还可以通过在参数前面加上 as @
in...来指定纪元秒时间。
root@beaglebone:~/bbbrtc# date -d "@1524884843"
Sat Apr 28 03:07:23 UTC 2018
然而,当我尝试将@
前缀纪元时间与计算结合起来时,我收到错误......
root@beaglebone:~/bbbrtc# date -d "@1524884843+1 month"
date: invalid date `@1524884843+1 month'
将纪元时间与相对计算相结合的正确语法是什么?
答案1
您可以将计算结果放在括号内...
root@beaglebone:~/bbbrtc# date -d "@1524884843+(1 month)"
Sat Apr 28 03:07:23 UTC 2018
答案2
使用 ast-open date
(可能是 ksh93 的内置日期,具体取决于它的构建方式和环境):
$ date -d '#1234567890'
Fri Feb 13 23:31:30 GMT 2009
$ date -d "#1234567890 30 days"
Sun Mar 15 23:31:30 GMT 2009
(ast date
不支持以月表示的偏移量(月没有固定长度))。
使用 GNU date
,您可以使用旧方法(在@epoch
添加支持之前),将纪元时间表示为相对于 1970-01-01 00:00:00 UTC 的偏移量(以秒为单位):
$ date -d '1970-01-01T00:00:00Z + 1234567890 seconds'
Fri 13 Feb 23:31:30 GMT 2009
$ date -d '1970-01-01T00:00:00Z + 1234567890 seconds + 1 month'
Mon 16 Mar 23:31:30 GMT 2009
但请注意,这里,1个月是31天,大概是因为date
考虑到1个月偏移量是相对于 1970 年 1 月而言的。
如果您date
是 GNU 的并且您希望它在相对于月份的日期中表现出的行为,即一个月的偏移量为您提供该月的同一天(假设下个月有这样的一天)作为开始日期(虽然如果时间间隔中有一些 DST 变化,则不一定是一天中的同一时间),那么您可能需要使用@isaac 的两步方法。