在计算中使用纪元时间的语法以及“date”命令的“--date=STRING”用法

在计算中使用纪元时间的语法以及“date”命令的“--date=STRING”用法

我有一个自 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 的两步方法

相关内容