mysql - 如何使用 Rails 或原始 SQL 使用自己的时区查询多个时区的记录

标签 mysql sql ruby-on-rails postgresql timezone

这是我的问题:我的数据库中存储了带有 UTC 时区的记录,但是!我需要查询这些记录并根据记录自己的时区在一天内返回所有内容,而不考虑其 UTC 日期。

例子?

假设我在 America/Denver 的星期二 00:30 上传了一条记录,并且在 America/Los_Angeles 的星期一的 00:30 上传了一堆记录

现在,当我查询周一全天的记录时,我得到的是周二的记录,因为 America/Denver 中的 00:30 从技术上讲是 中的周一美国/洛杉矶。我正在运行原始 SQL 来尝试在我的 Rails 项目中解决这个问题,但是......没有办法。

有什么帮助吗?

SELECT
DATE(uploaded_at AT TIME ZONE 'UTC' AT TIME ZONE areas.iso_time_zone) as uploaded_at,
count(DISTINCT photos.id)
FROM photos, areas
WHERE photos.category IN ('landscape', 'family', 'animal', 'saucy', 'feet', 'portrait')
AND photos.uploaded_at
BETWEEN '2017-03-27 00:00:00 UTC' AND '2017-04-02 23:59:59 UTC'
GROUP BY DATE(uploaded_at AT TIME ZONE 'UTC' AT TIME ZONE areas.iso_time_zone)
ORDER BY DATE(uploaded_at AT TIME ZONE 'UTC' AT TIME ZONE areas.iso_time_zone);

最佳答案

使用in_time_zone 方法。文档在这里:http://apidock.com/rails/DateTime/in_time_zone

例。用法:

t = foo.start_time
=> 2000-01-01 14:20:00 UTC
t.zone
=> "UTC"
t.in_time_zone("America/New_York")
=> Sat, 01 Jan 2000 09:20:00 EST -05:00

您可以使用它根据相应的时区转换时间,从而为您提供查询 UTC 记录的正确范围。

关于mysql - 如何使用 Rails 或原始 SQL 使用自己的时区查询多个时区的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43102890/

相关文章:

ruby-on-rails - 在没有自动递增 ID 的情况下为模型使用嵌套属性

php - 借助数组和获取错误上传图像

mysql - 在终端上自动化 MySQL 脚本

php - 如何编写查询以根据条件检查另一个表?

php - 如何在 mysql 表中显示每个父级的子级

javascript - 将 SQL 命令与数据库匹配

mysql - 如何查询连接表以满足多个条件?

ruby-on-rails - Rails 3 link_to 路由(编辑)嵌套资源

mysql - SQL:重新排列表以获得唯一的组合

ruby-on-rails - 使用 webpack dev server 和 rails server 进行 webpack 热重载