gpt4 book ai didi

ruby-on-rails - 比较 postgres 和 Rails 中的时间

转载 作者:行者123 更新时间:2023-11-29 12:51:21 26 4
gpt4 key购买 nike

很简单,我有一个问题:

@current_user.items.where('updated_at > ? AND updated_at < ?', last_sync_time_from_client, current_time)

我的问题是,我认为数据库中比较的时间和 last_sync_time_from_client 是在 float 基础上比较的。这总是导致 updated_at > last_sync_time_from_client 为真,即使时间与秒相同也是如此。

(db item)updated_at.to_f # 1541246811.022979
last_sync_time.to_f # 1541246811.0

这意味着精确到秒都相同的时间会返回奇怪的结果。有没有办法解决这个问题,或者我应该简单地向 last_sync_time_from_client 添加一秒钟以解决 Rails 在这里很奇怪的问题?

最佳答案

这里有三种解决方案。解决方案 1 是最好的(非破坏性的)。解决方案 2 和 3 直接影响数据库中的存储值,因此选择它需要您自担风险。

方案一

使用

date_trunc('second', updated_at);

而不是 updated_at。参见 the answer to "Discard millisecond part from timestamp"了解详情。

解决方案2

强制 Rails 始终以秒的精度更新时间戳,将亚秒部分截断为零。

参见 an answer to "Is there a way to change Rails default timestamps to Y-m-d H:i:s (instead of Y-m-d H:i:s.u) or have laravel ignore decimal portion of Y-m-d H:i:s.u?"

方案三

将数据库中 updated_at 列的精度设置为秒,而不是默认的亚秒(如毫秒)。

参见 the answers to "how to change rails migration t.timestamps to use timestamp(0) without timezone in postgres"了解如何使用 Rails 迁移。

关于ruby-on-rails - 比较 postgres 和 Rails 中的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53131535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com