我正在尝试date
将诸如“2 小时”之类的表达式转换为诸如 7200 之类的秒数。我认为我可以通过以下调用来执行此操作:
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
然而,我在这样做时注意到了极其奇怪的结果。 (我的/etc/timezone
包含“欧洲/巴黎”,因此使用 来TZ
强制 UTC 时间。)
omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s"
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s"
-3540
第一个结果足够合理,但我真的很困惑如何date
得出最后三个结果。有人理解这些结果之间的逻辑吗?
答案1
我认为它将您+ x
作为时区说明符(例如,考虑2013-04-25 19:52:36 +4
是一个有效的时间戳,在 UTC 之前 4 小时的时区中)。
然后它会看到“分钟”这个词,并将其视为分钟的同义词,因此稍后给您一分钟。
如果您输入明确的时区说明符,它会起作用:
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s"
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s"
60
请注意UTC
秒字段之后。您还可以输入第二个+0
:
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60
...但至少就个人而言,这更难阅读。
或者您可以Z
在秒后添加 a 等。在上面的示例中,您实际上不需要TZ
将环境变量设置为 UTC。