在ruby中使用time数据类型

时间:2013-08-20 12:47:51

标签: ruby time

Ruby中是否有可用于SQL TIME(00:00:00 ... 23:59:59)的宝石。现在它被转换为日期时间对象,绝对不是我想要的。我想检查一段时间内是否包含某个时间。

我最好的解决方案是将它转换为ruby(0 ... 235959)中的整数并对此起作用,但我想知道是否有更好的解决方案。

我想将它用于订阅应用程序,人们可以订阅通知并说他们希望收到通知,例如在7:00到18:30之间

2 个答案:

答案 0 :(得分:0)

在最一般的情况下,没有一些痛苦就不会工作。 "午夜的价值加上2小时15分钟"面对夏令时,我们并不确定。在春天变化的早晨," 02:15 AM"不是一个有效的时间。

您可以通过在午夜和凌晨4:00之间禁用时间来回避这个问题。

如果您不使用数据库,则可以24小时格式存储为规范格式的字符串。可以直接比较规范字符串的相等性和不等式,并且可以通过将它们与任意日期连接并使用Ruby的本机Date方法对它们进行简单的算术运算。

或者你可以建立一个实现任何"时间"你喜欢的界面。

宝石:ice_cube和痒痒的声音就像他们瞄准你的问题空间一样,但我还没有使用它们。

答案 1 :(得分:-1)

这里的主要问题是SQL时间字符串格式和Ruby的datetime对象之间的区别。

我认为您需要的是DateTime#strftimeDateTime#strptime方法。例如,要从DateTime对象d转到SQL字符串,您将使用d.strftime('%H:%M:%S'),并从字符串s转到DateTime,您将使用{{ 1}}。

编辑: 我知道。我是这样说的,因为你不能用sql使用的字符串格式进行那些计算,你可以将它转换为DateTime或Time对象,并为7:00到18:30之间的例子做这样的事情: / p>

DateTime.strptime(s, '%H:%M:%S')