Запутанные результаты расчета ActiveSupport::Duration

Я так понимаю из ActiveSupport::Duration (Rails 4.2.4 + ruby ​​2.2.1):

main > (1.month + 2.days).parts
[[:months, 1], [:days, 2]]

Хотя я этого не понимаю:

main > (1.hour + 35.minutes).parts
[[:seconds, 3600], [:seconds, 2100]]

Разве ActiveSupport::Duration обрабатывает часы и секунды не так, как месяцы и дни? Документы на ActiveSupport::Duration довольно скудны (я не могу найти лучшую документацию ).

Моя основная цель - сохранить продолжительность (часы и минуты) в модели Rails. Должен ли я забыть о ActiveSupport::Duration и просто хранить секунды, а затем выполнять свои собственные вычисления?


person RobertJoseph    schedule 19.10.2015    source источник
comment
В документах, на которые вы ссылаетесь, действительно упоминается parts. Это свойство чтения-записи.   -  person meagar    schedule 20.10.2015
comment
Я тоже не уверен, что должен делать #parts. Я думаю, вы должны хранить секунды и делать свои собственные расчеты. Это может быть довольно просто в зависимости от того, какие вычисления вы хотите сделать, или вам может понадобиться использовать рубиновые классы Time/Date, чтобы помочь вам. Или, может быть, вы хотите хранить часы и минуты и делать свои собственные вычисления. Зависит от того, что вы пытались сделать, мне непонятно. Если кажется, что вы начинаете, зная точно, сколько часов и сколько минут у вас есть, а затем вы хотите, чтобы AS::Duration сообщал вам... сколько часов и сколько минут у вас есть? Но вы это уже знали.   -  person jrochkind    schedule 20.10.2015


Ответы (1)


ActiveSupport обрабатывает месяцы и дни (и годы) отдельно от часов, минут и секунд.

Это связано с тем, что продолжительность в один час (или 23 минуты) всегда представляет собой точное количество секунд. Месяц, с другой стороны, представляет собой различное количество дней, а день может состоять из 23, 24 или 25 часов в зависимости от изменений летнего времени.

Похоже, вам не нужна эта функциональность, и в этом случае хранение нескольких секунд, вероятно, проще.

person Frederick Cheung    schedule 20.10.2015