以秒为单位获取 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 时间戳(当前时间,以秒为单位)

如何在jquery中以秒为单位获取两个日期之间的差异?

如何在 Firestore Objective-c 上设置/更新数据时以秒为单位获取 Firebase 服务器时间?

使用linux命令以秒为单位获取墙上时间?