2010-11-15 49 views
4

在红宝石中是否已经实现了所有日期,时间,持续时间和ISO 8601标准的间隔使用情况?我的意思是像一个类,你可以设置和获取细节,如年,月,日,day_of_the_week,周,小时,分钟,is_duration ?, has_recurrence?等等,这些也可以被设置和导出到一个字符串?在红宝石中是否有ISO 8601的全面库/模块?

回答

3
require 'time' 

time = Time.iso8601 Time.now.iso8601 # iso8601 <--> string 
time.year # => Year of the date 
time.month # => Month of the date (1 to 12) 
time.day  # => Day of the date (1 to 31) 
time.wday # => 0: Day of week: 0 is Sunday 
time.yday # => 365: Day of year 
time.hour # => 23: 24-hour clock 
time.min  # => 59 
time.sec  # => 59 
time.usec # => 999999: microseconds 
time.zone # => "UTC": timezone name 

看看Time。它有很多东西在里面。

不幸的是Ruby的内置日期时间功能似乎并没有通过(比较.NET为例)是经过深思熟虑,因此对于其他的功能,你将需要使用一些宝石。

好的是,使用这些宝石确实感觉它是一个内置的Ruby实现。

ActiveSupport(Rails 3)中最有用的可能是Time Calculations
您不需要导轨,只需要这个小型库:gem install activesupport

然后you can do

require 'active_support/all' 
Time.now.advance(:hours => 1) - Time.now # ~ 3600 
1.hour.from_now - Time.now # ~ 3600 - same as above 
Time.now.at_beginning_of_day # ~ 2010-11-24 00:00:00 +1100 
# also at_beginning_of_xxx: xx in [day, month, quarter, year, week] 
# same applies to at_end_of_xxx 

实际上有很多的事情可以做,我相信你会发现什么您需求非常好。

因此,我建议您不要在这里给出抽象的例子,而是尝试irb,要求active_support

保留Time Calculations

+0

好的开始,但据我所知,这个解决方案完全错过了持续时间和间隔部分。 – dStulle 2010-11-16 08:03:13

+0

我已经更新了答案。您可以使用ActiveSupport。 – 2010-11-24 00:43:06

2

Ruby时间库为Time类添加了一个iso8601方法。请参阅here.

我不知道导出其他ISO 8601格式的gem。您可以自行扩展Time类以添加它们。

通常您会使用strftime方法打印出特定的格式。 Example.

+0

我已经找到了这些链接,但这些只是我正在寻找的东西的一小部分。 – dStulle 2010-11-16 08:01:59