我是一名非常熟悉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,但它似乎没有我期望的基于文档的方法。
答案 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。