在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>
令人担心的是,如果在任何提到的语言中使用错误的方法,或者想要解决这个问题,以便在两种语言中获得相同的纪元秒。由于我的应用程序开发使用这两种语言,因此这些语言之间将共享时间。
我认为这与语言版本无关,因为无论语言如何,时间戳都是相同的。
答案 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()
它会返回您的时区的纪元时间。