【问题标题】:epoch timestamp difference between Ruby and Python [duplicate]Ruby和Python之间的纪元时间戳差异[重复]
【发布时间】:2018-06-22 13:08:19
【问题描述】:

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

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

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

【问题讨论】:

  • .strftime("%s") 是无效的格式字符串。引发错误。不知道你是怎么得到的。
  • @sytech 它在 python 3.6.2 中对我有用。
  • 为什么说“以秒为单位的巨大差异”而不是“六小时差异”?我觉得后者更有意义。

标签: python ruby timestamp epoch


【解决方案1】:

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

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

这个答案提出了两种不同的方法来获取我必须为 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() 返回UTC 纪元时间,在datetime.utcnow() 它返回您的时区的纪元时间。

【讨论】:

  • 感谢您的澄清。在datetime.now() 上调用timestamp() 返回UTC 纪元时间是一个问题。我在想timestamp() 只是返回本地时区纪元时间。效果很好。
猜你喜欢
  • 2011-06-13
  • 2017-01-22
  • 2017-11-04
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 2012-12-14
相关资源
最近更新 更多