Ruby和Python之间的纪元时间戳差异

时间:2018-01-13 04:37:52

标签: python ruby timestamp epoch

在Python和Ruby语言之间将数据时间转换为纪元格式时,我看到了一个奇怪的问题。我注意到在同一台服务器上的秒数差异很大。

在Python 3.6.2中:

>>> datetime.datetime.utcnow()
datetime.datetime(2018, 1, 13, 4, 25, 19, 204056)
>>> int(datetime.datetime.utcnow().strftime("%s"))
1515839122
>>>

在Ruby 1.8.7中:

irb(main):038:0> Time.now.utc
=> Sat Jan 13 04:25:18 UTC 2018
irb(main):039:0> Time.now.utc.to_i
=> 1515817520
irb(main):040:0>

令人担心的是,如果在任何提到的语言中使用错误的方法,或者想要解决这个问题,以便在两种语言中获得相同的纪元秒。由于我的应用程序开发使用这两种语言,因此这些语言之间将共享时间。

我认为这与语言版本无关,因为无论语言如何,时间戳都是相同的。

1 个答案:

答案 0 :(得分:1)

关于从Python datetime获取纪元时间的问题this answer

  

Python实际上不支持%s作为strftime的参数(如果你在http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior检查它不在列表中),它工作的唯一原因是因为 Python将信息传递给你system的strftime,它使用您当地的时区。

该答案提出了两种不同的方法来获取我必须稍微修改UTC的纪元时间:

int((datetime.datetime.utcnow() - datetime.datetime(1970,1,1)).total_seconds())

和Python 3方式:

int(datetime.datetime.now().timestamp())

在第二个解决方案中使用datetime.now()代替datetime.utcnow()是有意的 - 由于我不确定的原因,在timestamp()上调用datetime.now()会返回UTC时代时间和datetime.utcnow()它会返回您的时区的纪元时间。