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

epoch timestamp difference between Ruby and Python

在 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>

我担心是否在任何提到的语言中使用了错误的方法,或者正在寻找解决此问题的方法以在两种语言中获得相同的纪元秒。由于我的应用程序是为使用这两种语言而开发的,因此纪元时间将在这些语言之间共享。

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

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

Python doesn't actually support %s as an argument to strftime (if you check at http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior it's not in the list), the only reason it's working is because Python is passing the information to your system's strftime, which uses your local timezone.

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

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

和一个Python 3路:

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

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