Ruby 将记号解析为datetime

Ruby 将记号解析为datetime,ruby,Ruby,如何在Ruby中将记号(如129801537289)转换为日期时间 我需要转换的值来自JavaScriptDate.now()调用,因此它以毫秒为单位: 或者因为您使用的是毫秒而不是秒: myTime = Time.at(1298011537289 / 1000) 但这只会降低亚秒精度,以保持精度: myTime = Time.at(Rational(1298011537289, 1000)) 假设该值以毫秒为单位,我会这样做: require 'date' DateTime.parse(T

如何在Ruby中将记号(如
129801537289
)转换为日期时间

我需要转换的值来自JavaScript
Date.now()
调用,因此它以毫秒为单位:

或者因为您使用的是毫秒而不是秒:

myTime = Time.at(1298011537289 / 1000)
但这只会降低亚秒精度,以保持精度:

myTime = Time.at(Rational(1298011537289, 1000))

假设该值以毫秒为单位,我会这样做:

require 'date'
DateTime.parse(Time.at(1298011537289 / 1000).to_s) # => #<DateTime: 2011-02-17T23:45:37-07:00 (212164771537/86400,-7/24,2299161)>
需要“日期”
DateTime.parse(Time.at(129801537289/1000).to#s)=>#
使用并解析它,格式为
%Q-自1970-01-01 00:00:00 UTC以来的微秒数。

例如:
DateTime.strtime“1352748750274”,“%Q”

你知道未来会超过40000年,对吧?安德鲁:那是1970-01-01以来的毫秒。我以为他指的是POSIX刻度,它是1s或1μs。在Windows上是1ms,很抱歉犯了这个错误。安德鲁:在Windows上是100ns。或者1ms取决于():)将时间转换为日期时间没有什么作用,因为随着时间的推移,日期时间的主要优点是它提供了更大的范围。然而,它也比时间慢。当OP要求这样做时,它有很多用途。“我怎样才能将一个记号(比如129801537289)转换成Ruby中的DateTime?”这是IMO最好的方法。在处理来自第三方API的毫秒数的日期时,我不得不设置测试,我发现自己做了很多
(Date.today+1.month)。到_I
然后在其他地方做
Time.at(fakedate/1000)
。这样做的缺点是时间。at将选择您所在的时区(至少在Rails环境中)。这种解析日期的方法简洁明了。非常感谢。您可以使用
Time.at(129801537289/1000.tof)
以避免失去毫秒精度。@MichałZalewski您是对的,我已经更新了我的答案以包含它。谢谢
require 'date'
DateTime.parse(Time.at(1298011537289 / 1000).to_s) # => #<DateTime: 2011-02-17T23:45:37-07:00 (212164771537/86400,-7/24,2299161)>