Ruby中是否有可用于SQL TIME
(00:00:00 ... 23:59:59)的宝石。现在它被转换为日期时间对象,绝对不是我想要的。我想检查一段时间内是否包含某个时间。
我最好的解决方案是将它转换为ruby(0 ... 235959)中的整数并对此起作用,但我想知道是否有更好的解决方案。
我想将它用于订阅应用程序,人们可以订阅通知并说他们希望收到通知,例如在7:00到18:30之间
答案 0 :(得分:0)
在最一般的情况下,没有一些痛苦就不会工作。 "午夜的价值加上2小时15分钟"面对夏令时,我们并不确定。在春天变化的早晨," 02:15 AM"不是一个有效的时间。
您可以通过在午夜和凌晨4:00之间禁用时间来回避这个问题。
如果您不使用数据库,则可以24小时格式存储为规范格式的字符串。可以直接比较规范字符串的相等性和不等式,并且可以通过将它们与任意日期连接并使用Ruby的本机Date方法对它们进行简单的算术运算。
或者你可以建立一个实现任何"时间"你喜欢的界面。
宝石:ice_cube和痒痒的声音就像他们瞄准你的问题空间一样,但我还没有使用它们。
答案 1 :(得分:-1)
这里的主要问题是SQL时间字符串格式和Ruby的datetime对象之间的区别。
我认为您需要的是DateTime#strftime
和DateTime#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')