如何从rails中的日期时间中删除毫秒?

log*_*esh 22 datetime ruby-on-rails ruby-on-rails-3

我必须比较rails中的日期以获取该日期之后我发送日期的值,"2013-03-04T06:26:25Z"但实际上db中的记录包含日期,如下2013-03-04 06:26:25.817149所以当我检查日期时它也会返回该记录,但我希望记录之后日期.我怎样才能从数据库中删除毫秒?请帮我.

Int*_*idd 35

我遇到了类似的问题

在将时间对象发送到数据库之前更新这样的时间对象:

time.change(:usec => 0)
Run Code Online (Sandbox Code Playgroud)

  • 微秒很重要,尤其是。当你在测试时。数据库可能会将微秒截断为预定义的精度,例如 Postgres 将其设为 6。因此从数据库读回的值**不**与它在 Ruby 领域中的值相匹配,并且您会得到如下不匹配:`-:completed_at => 2018-07-30 12:27:06.544967008 +0000, +:completed_at => 2018-07-30 12:27:06.544967000 +0000`。最简单的方法是删除我们将要存储的值中的微秒。然后匹配就可以了,我们不必解决这个截断问题。 (2认同)

Nat*_*han 17

由于ruby 1.9你可以使用 round

t = Time.now.round
t.usec # => 0
Run Code Online (Sandbox Code Playgroud)

  • `.round` _rounds_,它不只是删除毫秒。因此,在 OP 示例中,您会得到 `06:26:25 != 06:26:26` (4认同)

pjr*_*sch 6

我也遇到了这个问题,但是当我按照@Intrepidd's answer 中的指示应用更改时,它并没有影响我的时间对象的微秒。

请注意(至少目前)该:usec密钥仅适用于该Time#change方法,而不适用于该DateTime#change方法。

DateTime#change方法会忽略它不接受的键,因此除非您进一步检查对象(例如使用DateTime#rfc3339(9)),否则您将无法判断您尝试更改的微秒数无效。

因此,在尝试进行此更改之前,请确保您使用的是Time对象,而不是DateTime对象。