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 您所在时区的纪元时间。
在 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 您所在时区的纪元时间。