Gre*_*ell 166
DateTime.now.new_offset(0)
Run Code Online (Sandbox Code Playgroud)
将使用标准Ruby(即没有ActiveSupport).
Dan*_*man 146
d = DateTime.now.utc
哎呀!
这似乎在Rails中有效,但不是vanilla Ruby(当然这就是问题所在)
d = Time.now.utc
Run Code Online (Sandbox Code Playgroud)
然而,工作.
你有什么理由需要使用DateTime而不是Time吗?Time应该包括你需要的一切:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
Run Code Online (Sandbox Code Playgroud)
不幸的是,DateTime类没有Time类中可用的便捷方法来执行此操作.您可以将任何DateTime对象转换为UTC,如下所示:
d = DateTime.now
d.new_offset(Rational(0, 24))
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令从UTC切换回本地时间:
d.new_offset(DateTime.now.offset)
Run Code Online (Sandbox Code Playgroud)
其中d是UTC时间的DateTime对象.如果你喜欢这些作为便利方法,那么你可以像这样创建它们:
class DateTime
def localtime
new_offset(DateTime.now.offset)
end
def utc
new_offset(Rational(0, 24))
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在以下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"
Run Code Online (Sandbox Code Playgroud)
如上所示,初始DateTime对象具有-04:00偏移(东部时间).我在太平洋时间以-07:00偏移.localtime如前所述调用正确地将DateTime对象转换为本地时间.调用utc对象可以将其正确转换为UTC偏移量.
如果您希望您的Time.now和DateTime.now以UTC 时间响应,您可以设置一个ENV 。
require 'date'
Time.now #=> 2015-11-30 11:37:14 -0800
DateTime.now.to_s #=> "2015-11-30T11:37:25-08:00"
ENV['TZ'] = 'UTC'
Time.now #=> 2015-11-30 19:37:38 +0000
DateTime.now.to_s #=> "2015-11-30T19:37:36+00:00"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
103542 次 |
| 最近记录: |