这是我的问题:我的数据库中存储了带有 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/