在 ruby​​ 中表示没有日期的时间

Posted

技术标签:

【中文标题】在 ruby​​ 中表示没有日期的时间【英文标题】:Represent a time with no date in ruby 【发布时间】:2011-09-15 15:24:56 【问题描述】:

有没有办法在没有附加日期的情况下在 ruby​​ 中表示时间?我正在做一个时间跟踪应用程序,我只需要进出时间,日期有一个单独的列。

mysql TIME 数据类型只存储时间,但在 Rails 中它返回为 Jan 1 2000 + 那里的任何时间。

我应该忽略日期部分,还是有办法消除它?

【问题讨论】:

【参考方案1】:

我们只是将没有附加日期的时间作为自午夜以来的分钟数存储在整数列中(尽管如此,这是 Postgres 而不是 MySQL)。也许这种方法也适合你?

【讨论】:

啊是的,我不需要那样存储在数据库中,但可能是比较它们的一种简单方法。 ActiveSupport 包含一个 time.seconds_since_midnight 方法。 正是我需要的。这家伙真是个天才。 如果可以的话,我会 +100。该死的天才。 值得一提的是,这可能不适用于夏令时有问题的日子,因为它们的分钟数与其他日子不同。 在我的具体案例中,它们用于表示营业时间。自定义 getter 只需将分钟转换为小时和分钟。【参考方案2】:

没有办法消除它,because:

时间在内部存储为自 1970 年 1 月 1 日 00:00 UTC 纪元以来的秒数。

格式如下:

t = Time.now
t.strftime("at %I:%M%p")

【讨论】:

我知道我可以这样格式化,我更担心减法和两个不同的日期。 您只需要根据您的精度要求使用 t.hour、t.min、t.sec 等手动处理它。进场时间是 23:00,离场时间是 01:00 会发生什么? 如果发生这种情况,他们可以输入两个条目,这些时间没有人在这里工作,所以现在不是问题。但是,是的,唉,我希望它本身就支持这一点。 是的,Ruby 的 Time 存储秒数,所以我正在寻找一个只存储小时、分钟和秒的类(我称之为 TimeSpan ),以便我可以查询:`WorkLog.where(" workduration > ?", TimeSpan.new(8,30,0) ) `

以上是关于在 ruby​​ 中表示没有日期的时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中表示和合并具有*日期范围*的时间序列数据帧?

Ruby - 模型中表示的迁移参考

在 Apiary 中表示输入参数是日期/时间的正确格式是啥?

有没有办法在 EasyAdmin 3 中表示 JSON 字段?

如何在 TypeOrm 中表示视图?

有没有办法在 GraphQL 中表示键值对的对象