为什么<{1}}等于其解析的等价物?
Time.current
我实际上在Ruby on Rails应用程序中遇到此问题,我尝试根据已解析的日期时间属性查找记录,如最后一行所示。
我真的不明白。时区是相同的,时间是相同的秒到秒。这里发生了什么?
此外,我应该如何根据解析的日期时间继续查找记录?
答案 0 :(得分:21)
它们不应该是相同的:
current.to_f #=> 1442417032.6567826
parsed.to_f #=> 1442417032.0
解析时,你会错过毫秒。
答案 1 :(得分:5)
感谢大家的帮助。我希望你不要介意,但由于最终答案的部分分散在多个答案中,我将根据你们所说的话回答我自己的问题。
至于为什么日期不同,因为在解析的日期时间内缺少毫秒。正如@dimakura所说。
current.to_f #=> 1442417032.6567826
parsed.to_f #=> 1442417032.0
然后答案是关于如何根据解析的日期时间获取票证记录。
首先,知道这只与PostgreSQL(我的情况)或实际存储毫秒的其他数据库相关是很重要的。感谢@sjagr提到这一点。
所以我们必须查询从解析到解析+ 1秒的范围,就像@Stefan解释的那样:
Ticket.where(datetime: parsed...parsed+1).first
如果我们对Ticket创建有控制权,我们还可以在保存数据库之前删除毫秒精度。感谢@sjagr提供了一种简单的方法。
current = Time.current
Ticket.create(datetime: current.change(usec: 0))
谢谢大家!
答案 2 :(得分:3)
这是因为它们不相等,它们在第二部分不同。您在控制台中看到的是在这些日期调用inspect
方法的结果,默认情况下,删除任何亚秒级部分。