Есть ли полная библиотека/модуль для ISO 8601 в ruby?

Существует ли уже реализация всех дат, времени, продолжительности и интервалов использования стандарта ISO 8601? в рубине? Я имею в виду что-то вроде класса, где вы можете установить и получить такие детали, как год, месяц, день, день_недели, неделя, час, минуты, is_duration?, has_recurrence? и т.д., которые также могут быть установлены и экспортированы в строку?


person dStulle    schedule 15.11.2010    source источник


Ответы (2)


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

Взгляните на Время. В нем много всего.

К сожалению, встроенные функции Date-Time в Ruby не кажутся хорошо продуманными (по сравнению, например, с .NET), поэтому для других функций вам нужно будет использовать некоторые драгоценные камни.

Хорошо, что использование этих драгоценных камней действительно похоже на встроенную реализацию Ruby.

Вероятно, наиболее полезным является расчет времени от ActiveSupport (Rails 3).
Вам не нужны рельсы, а только эта небольшая библиотека: gem install activesupport.

Затем вы можете сделать:

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.

Держите под рукой расчет времени.

person Dmytrii Nagirniak    schedule 16.11.2010
comment
Хорошее начало, но, насколько я знаю, в этом решении полностью отсутствует часть продолжительности и интервала. - person dStulle; 16.11.2010

Библиотека Ruby Time добавляет метод iso8601 в класс Time. См. здесь.

Я не знаю драгоценного камня, который экспортирует другие форматы ISO 8601. Вы можете самостоятельно расширить класс Time, чтобы добавить их.

Часто вы будете использовать метод strftime для печати в определенных форматах. Пример.

person Larry K    schedule 16.11.2010
comment
Я уже нашел эти ссылки, но это лишь малая часть того, что я ищу. - person dStulle; 16.11.2010