【问题标题】:Confusing ActiveSupport::Duration calculation results令人困惑的 ActiveSupport::Duration 计算结果
【发布时间】:2015-10-19 21:34:35
【问题描述】:

我从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,只存储秒数然后自己计算吗?

【问题讨论】:

  • 您链接到的文档确实提到了parts。这是一个读写属性。
  • 我也不确定#parts 应该做什么。我认为您应该存储秒数并进行自己的计算。根据您想要进行的计算,这可能很容易,或者您可能需要使用 ruby​​ 时间/日期类来帮助您。或者,也许您想存储小时和分钟并进行自己的计算。取决于你想做什么,我不清楚。如果您一开始似乎确切地知道自己有多少小时和多少分钟,那么您希望 AS::Duration 告诉您……您有多少小时和多少分钟?但你已经知道了。

标签: ruby-on-rails ruby duration activesupport


【解决方案1】:

ActiveSupport 分别处理月、日(和年)与小时、分钟和秒。

这是因为一小时(或 23 分钟)的持续时间始终是精确的秒数。另一方面,一个月是不同的天数,一天可以有 23、24 或 25 小时,具体取决于夏令时的变化。

听起来您不需要此功能,在这种情况下存储几秒钟可能更简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多