Rails DateTime对象不是我所期望的

时间:2010-12-11 03:55:45

标签: ruby-on-rails ruby

我是一名非常熟悉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

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

2 个答案:

答案 0 :(得分:8)

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"

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

require 'active_support/all'
asdf.in_time_zone # => Fri, 10 Dec 2010 21:43:42 -0700

require 'active_support/core_ext'
asdf.in_time_zone # => Fri, 10 Dec 2010 21:59:48 -0700

Ruby的Time类也对时区有很好的支持,所以你可能也希望get familiar with it

答案 1 :(得分:0)

您不需要整个Rails堆栈来支持时区。您可以只安装和使用active_support。但你也可以查看tzinfo gem。