为什么这两个日期时间不同?

时间:2015-09-16 15:20:01

标签: ruby-on-rails ruby parsing datetime

为什么<{1}}等于其解析的等价物?

Time.current

我实际上在Ruby on Rails应用程序中遇到此问题,我尝试根据已解析的日期时间属性查找记录,如最后一行所示。

我真的不明白。时区是相同的,时间是相同的秒到秒。这里发生了什么?

此外,我应该如何根据解析的日期时间继续查找记录?

3 个答案:

答案 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方法的结果,默认情况下,删除任何亚秒级部分。