以秒为单位获取 UTC 时间
Posted
技术标签:
【中文标题】以秒为单位获取 UTC 时间【英文标题】:Get UTC time in seconds 【发布时间】:2014-08-24 05:17:28 【问题描述】:看起来我无法在第二次获得 bash UTC 日期。我在悉尼所以 + 10 小时 UTC 时间
date
Thu Jul 3 17:28:19 WST 2014
date -u
Thu Jul 3 07:28:20 UTC 2014
但是当我尝试转换它时,我得到了相同的结果,不是 UTC 时间
date +%s
1404372514
date -u +%s
1404372515
我在这里错过了什么?
在得到回复说 date +%s
正在返回 UTC 时间后,这里有更多关于我现在面临的问题的详细信息。
我正在尝试将写入文件中的日期与 python 进行比较。此日期以 UTC 时间以秒为单位写入。而 bash date +%s
并没有给我同样的结果。实际上,如果我在 python time.asctime(time.localtime(date_in_seconds_from_bash))
中进行操作,我会得到悉尼的当前时间,而不是 UTC。我不明白。
【问题讨论】:
date +%s
的返回值确实是 UTC
【参考方案1】:
我相信+%s
是纪元以来的秒数。它是时区不变的。
【讨论】:
无论如何要以UTC秒为单位获取日期? @RomanzoCriminale 根据date --help
:%s seconds since 1970-01-01 00:00:00 UTC
。添加-u
并没有什么不同。它仍将基于 UTC 打印。这就是您获得相同值的原因。
你上面的两个答案都是正确的。 UTC 秒在世界任何地方都是相同的,因此对于明确的时间戳很有用。自 1970 年悉尼午夜以来的秒数可以通过计算该时间与 UTC 零时间之间的差异(我想是 11 小时左右),但这个数字可能不是你想要的。
我的问题是我正在尝试将文件中写入的日期与 python 进行比较。此日期以 UTC 时间的秒数写入。而 bash 'date +%s 并没有给我同样的结果。实际上,如果我在 python time.asctime(time.localtime(date_in_seconds_from_bash)) 中做,我得到的是悉尼的当前时间而不是 UTC。我不明白【参考方案2】:
我敢打赌,这就是预期的结果。
$ date -u --date=@1404372514
Thu Jul 3 07:28:34 UTC 2014
【讨论】:
【参考方案3】:你说你正在使用:
time.asctime(time.localtime(date_in_seconds_from_bash))
其中date_in_seconds_from_bash
大概是date +%s
的输出。
time.localtime
函数,顾名思义,为您提供当地时间。
如果您需要 UTC,请使用 time.gmtime()
而不是 time.localtime()
。
正如JamesNoonan33's answer 所说,date +%s
的输出是时区不变的,所以date +%s
完全等同于date -u +%s
。它打印自“纪元”以来的秒数,即1970-01-01 00:00:00 UTC
。您在问题中显示的输出与此完全一致:
date -u
Thu Jul 3 07:28:20 UTC 2014
date +%s
1404372514 # 14 seconds after "date -u" command
date -u +%s
1404372515 # 15 seconds after "date -u" command
【讨论】:
【参考方案4】:人们可能会考虑将此行添加到~/.bash_profile
(或similar),以便快速获取当前UTC 作为当前时间和自纪元以来的秒数。
alias utc='date -u && date -u +%s'
【讨论】:
以上是关于以秒为单位获取 UTC 时间的主要内容,如果未能解决你的问题,请参考以下文章
如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?
获取自 Linux 上的 Epoch、Bash 以来的当前时间(以秒为单位)
获取 Go 语言中的 Unix 时间戳(当前时间,以秒为单位)