我有一个使用许多不同时区的应用程序......它将它们设置在控制器中,它们会根据用户而变化。所有时间都以 UTC 格式存储,没有时间戳等。
我的理解是这是 Rails 处理时区的正常方式。这在 99% 的情况下都可以正常工作,直到我需要直接使用 Postgres 做某事,然后时区就成了问题。
例如,除了 GMT 之外,这个查询是完全错误的,例如在中央时区,根据设置的小时,它会得到错误的日期:
Events.where("EXTRACT(dow FROM start_at)", Date.today.wday)
我试图找到某一天的所有日期。
我正在尝试做这样的事情。我不需要在时区之间搜索(它们不会混合),但如果不是 UTC,我确实需要指定时区才能获得正确的结果。
User.events.where("EXTRACT(dow FROM start_at AT TIME ZONE ?) = ?", 'UTC', Date.today.wday)
但我不确定如何使用Time.zone
给我一些可以在 Postgres 中使用 TIME ZONE 的东西。
Time.zone.tzinfo 有时有效... Postgres 将与“Europe/Warsaw”一起使用,但 Rails 返回“Europe - Warsaw”
一般来说,我对时区没有太多的运气,任何指针都将不胜感激。