在ruby中是否有针对ISO 8601的综合库/模块?

时间:2010-11-15 21:51:14

标签: ruby datetime duration recurrence iso8601

是否已经实现了ruby中ISO 8601标准的所有日期,时间,持续时间和间隔使用情况?我的意思是类似于一个类,你可以在其中设置和获取详细信息,如年,月,日,day_of_the_week,周,小时,分钟,is_duration?,has_recurrence?等等也可以设置并输出到字符串?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

Ruby Time库为Time类添加了一个iso8601方法。见here.

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

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