以秒为单位获取UTC时间

Rom*_*ale 45 bash datetime date

看起来我无法在第二时间获得bash UTC日期.我在悉尼所以+ 10小时的UTC时间

 date
 Thu Jul 3 17:28:19 WST 2014

 date -u
 Thu Jul 3 07:28:20 UTC 2014
Run Code Online (Sandbox Code Playgroud)

但是当我尝试转换它时,我得到的结果与UTC时间相同

 date +%s
 1404372514

 date -u +%s
 1404372515
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?


在得到回答date +%sUTC时间的答案之后,这里有关于我现在面临的问题的更多细节.

我正在尝试将文件中写入的日期与python进行比较.此日期以UTC时间以秒为单位写入.而bash date +%s并没有给我同样的东西.实际上,如果我在python中time.asctime(time.localtime(date_in_seconds_from_bash)),我得到悉尼的当前时间,而不是UTC.我不明白.

Jam*_*n33 21

我相信+%s是时代以来的几秒钟.这是时区不变的.

  • @RomanzoCriminale根据`date --help`:`自1970-01-01 00:00:00 UTC`起的%s秒.添加`-u`并没有什么区别.它仍将基于UTC打印.这就是为什么你得到相同的值的原因. (4认同)
  • 您上面的两个答案都是正确的。UTC 秒在世界任何地方都是相同的,因此对于明确的时间戳很有用。自 1970 年悉尼午夜以来的秒数可以通过该时间与 UTC 零时(我想是 11 个小时左右)之间的差来计算,但这个数字可能不是您想要的。 (2认同)

小智 14

我敢打赌,这就是结果的意图.

$ date -u --date=@1404372514
Thu Jul  3 07:28:34 UTC 2014
Run Code Online (Sandbox Code Playgroud)


Kei*_*son 7

你说你正在使用:

time.asctime(time.localtime(date_in_seconds_from_bash))
Run Code Online (Sandbox Code Playgroud)

其中date_in_seconds_from_bash是推测的输出date +%s.

time.localtime顾名思义,该功能为您提供当地时间.

如果你想要UTC,请使用time.gmtime()而不是time.localtime().

正如JamesNoonan33的回答所说,输出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
Run Code Online (Sandbox Code Playgroud)


小智 6

人们可能会考虑添加这一行~/.bash_profile(或类似的),以便快速获取当前 UTC 作为当前时间和自纪元以来的秒数。

alias utc='date -u && date -u +%s'