Answers:
d = DateTime.now.utc
糟糕!
这似乎在Rails中有效,但在香草Ruby中无效(当然,这就是问题所在)
d = Time.now.utc
确实可以。
有没有你需要使用任何理由DateTime
不Time
?Time
应该包括您需要的一切:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
DateTime.now.new_offset(0)
将在标准Ruby中运行(即不使用ActiveSupport)。
new_offset
方法参数默认为0
已经。因此DateTime.now.new_offset
也可以使用。
不幸的是,DateTime类在Time类中没有可用的便捷方法来执行此操作。您可以像这样将任何DateTime对象转换为UTC:
d = DateTime.now
d.new_offset(Rational(0, 24))
您可以使用以下方法从UTC切换回本地时间:
d.new_offset(DateTime.now.offset)
d
UTC时间中的DateTime对象在哪里。如果您希望将这些作为便捷方法,则可以这样创建它们:
class DateTime
def localtime
new_offset(DateTime.now.offset)
end
def utc
new_offset(Rational(0, 24))
end
end
您可以在下面的irb会话中看到这一点:
d = DateTime.now.new_offset(Rational(-4, 24))
=> #<DateTime: 106105391484260677/43200000000,-1/6,2299161>
1.8.7 :185 > d.to_s
=> "2012-08-03T15:42:48-04:00"
1.8.7 :186 > d.localtime.to_s
=> "2012-08-03T12:42:48-07:00"
1.8.7 :187 > d.utc.to_s
=> "2012-08-03T19:42:48+00:00"
如上所示,初始DateTime对象的偏移量为-04:00(东部时间)。我在太平洋时间,偏移-07:00。localtime
如前所述的调用正确地将DateTime对象转换为本地时间。utc
正确调用该对象可将其转换为UTC偏移量。