ruby 中是不是有适用于 ISO 8601 的综合库/模块?

Posted

技术标签:

【中文标题】ruby 中是不是有适用于 ISO 8601 的综合库/模块?【英文标题】:Is there a comprehensive library/module for ISO 8601 in ruby?ruby 中是否有适用于 ISO 8601 的综合库/模块? 【发布时间】:2011-05-10 12:05:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:
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 相比),因此对于其他功能,您需要使用一些 gem。

好消息是,使用这些 gem 感觉就像是 Ruby 的内置实现。

最有用的可能是来自 ActiveSupport (Rails 3) 的 Time Calculations。 你不需要 Rails,只需要这个小库: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 放在手边。

【讨论】:

好的开始,但据我所知,这个解决方案完全忽略了持续时间和间隔部分。【参考方案2】:

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

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

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

【讨论】:

我已经找到了这些链接,但这些只是我正在寻找的东西的一小部分。

以上是关于ruby 中是不是有适用于 ISO 8601 的综合库/模块?的主要内容,如果未能解决你的问题,请参考以下文章

在 Ruby 中将 UTC 时间戳转换为 ISO 8601

如何在普通的旧 Ruby 中模拟 SQL `timestamp`?

假设输入是完整的 ISO 8601 字符串,“new Date(string)”在现代浏览器中是不是可靠?

ISO 8601:时间和日期的表示标准

如何解析 ISO 8601 格式的日期?

如何从busybox中的“日期”获取ISO8601秒格式?