Rails DateTime对象不是我所期望的

spa*_*y21 2 ruby ruby-on-rails

我是一名非常熟悉Ruby的Java开发人员,所以如果这个问题有点过于基础,请放轻松.:)我在这里了解是否有人可以指出我正确的方向.

我正在编写一个处理时间的应用程序,需要考虑时区.我很好奇Ruby为处理时区提供了什么,我发现Rails提供了一个应该做我需要的DateTime类. http://api.rubyonrails.org/classes/DateTime.html#method-i-in_time_zone

但是,当我创建一个DateTime时,它似乎没有我期望的方法.有人能解释一下这里发生了什么吗?这是我在irb中看到的:

>> dt = DateTime.now
NameError: uninitialized constant DateTime
    from (irb):1
>> require 'rails'
=> true
>> dt = DateTime.now
=> #<DateTime: 212158799144191849/86400000000,-1/4,2299161>
>> dt.respond_to? "in_time_zone"
=> false
Run Code Online (Sandbox Code Playgroud)

由于在我需要rails之前没有定义DateTime,我假设我使用的是Rails DateTime,但它似乎没有我期望的基于文档的方法.

the*_*Man 9

DateTime是一个核心类,也是一部分Date.如果你require 'date'在你的代码中,它是可用的; 您不必使用Rails来访问它.

require 'date'

asdf = DateTime.parse(`date`)
asdf # => #<DateTime: 2010-12-10T21:41:59-07:00 (212158802519/86400,-7/24,2299161)>
asdf.class # => DateTime
asdf.to_s # => "2010-12-10T21:41:59-07:00"
Run Code Online (Sandbox Code Playgroud)

您所使用的类是ActiveSupport的一部分,它是Rails的一部分,但您不必加载Rails来访问它:

require 'active_support/all'
asdf.in_time_zone # => Fri, 10 Dec 2010 21:43:42 -0700
Run Code Online (Sandbox Code Playgroud)

要么

require 'active_support/core_ext'
asdf.in_time_zone # => Fri, 10 Dec 2010 21:59:48 -0700
Run Code Online (Sandbox Code Playgroud)

Ruby的Time类也对时区有很好的支持,所以你可能也想熟悉它.