【问题标题】:Linux local versus UTC time in secondsLinux 本地时间与 UTC 时间(以秒为单位)
【发布时间】:2015-10-14 02:31:36
【问题描述】:

您能否解释一下这两种获取以秒为单位的经过时间的语法有什么问题?

如果我同时运行这两个命令:

date -u +%s   # - for UTC - returns e.g. 1303430843. 

date +%s     # - for local time - mine is set to pacific time
          # - also returns e.g. 1303430843

我得到完全相同的秒数(例如 1303430843),没有区别,但我预计 25200 秒 - 7 小时的差异,就像我跑步一样:

date -u "+%Y-%m-%d %H:%M:%S"    # returns:  2011-04-22 00:01:14

date    "+%Y-%m-%d %H:%M:%S"    # returns:  2011-04-21 17:01:14 - 7 hours difference

这里有什么问题?

谢谢

【问题讨论】:

  • Unix 时间戳始终采用 UTC...
  • 为什么你甚至想要在你的时区从 1970-01-01 获得秒数?

标签: linux date datetime time


【解决方案1】:

来自手册页:

自 1970 年 1 月 1 日 00:00:00 UTC 以来的 %s 秒

所以%s 返回自 UTC 指定的特定时间点以来的时间(以秒为单位),这意味着它根本不受时区的影响。

【讨论】:

  • 谢谢你,克里斯。因此,如果 %s 格式始终从 1970-01-01 00:00:00 UTC 计算,无论是否应用 -u 开关,我如何以简单的方式获得本地时间(例如 PST)时间?
  • @Felix:没有简单的方法可以做到这一点,因为真的没有必要。
  • 您可以使用date -d '1970-01-01 00:00:00 PST' +%s 获取该特定时间点的时间(以秒为单位)并从date +%s 中减去该时间以获取该时间点的当前时间偏移量。
【解决方案2】:

那是因为GMT uses UTC(在大多数情况下它们是可互换的)和 PDT 目前是 7 hours behind

以秒为单位获取当前 UTC 时间:

date -u +%s

以秒为单位获取当前 PDT 时间:

TZ=":US/Pacific" date +%s

它足够聪明,可以了解 DST,因此您不必担心。

【讨论】:

  • 抱歉,伙计们收得这么慢。我的理解是 -u 开关返回 UTC/GMT 时间,而如果我省略它,我会得到机器设置的本地时间。如果两个命令:date %s 和:date -u %s 返回相同的秒数,您能否告诉我如何在 Linux 机器上获取 UTC 和 PST 的当前时间(以秒为单位)?
【解决方案3】:

没有捕捉。时钟已设置并运行 UTC。 date 命令考虑了本地时区和夏令时。这样您就可以显示世界上任何时区的日期/时间。

【讨论】:

  • 谢谢 广告,我明白了,这就是为什么我希望命令有一些不同:date %s 和:date -u %s,虽然它返回相同的数字,那么问题是什么在这?
  • 没有“捕获”。时间只是UTC。由于时区/日光节约,呈现方式会有所不同
【解决方案4】:
%s     seconds since 1970-01-01 00:00:00 UTC

这不会随着时区而改变。计算是一样的。

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多