【发布时间】:2010-11-21 11:30:23
【问题描述】:
我拥有所需的所有时区信息,它会根据this railscast 正确保存所有信息。一切都适用于所有正常目的,例如在表格中显示时间,但是我想知道如何将以下内容转换为 current_users 保存的时区。
我有一个发现每小时的通话总数:
Calls.count(:group => DATE_PART('hour', start_time),
:conditions => ["start_time BETWEEN ? AND ?", start, finish]
此查询会提取在开始时间和结束时间之间一小时内进行的所有呼叫。唯一的事情是它在以UTC形式存储的数据库中拉回时间。我用Time.now.utc_offset 编写了自己的小转换方法,但意识到这行不通。将保存的用户 time_zone 与从数据库中下载的用户进行比较并添加 utc_offset 的好方法是什么。
time_zone 以字符串形式存储在数据库东部时间(美国和加拿大)中。
解决这个问题的最佳方法是什么,我可以更改以将用户的偏移量保存在数据库中,但在我这样做之前,我宁愿看看是否有更简单的方法。
编辑
更清楚地说,查询返回小时的哈希值和计数。比如:
Hour Count
"5" 20
"6" 15
"7" 35
... ...
小时作为 UTC 偏移小时返回,我需要将该数字转换为用户时区,例如,如果是东部时间(美国和加拿大),则循环遍历哈希并将 -4 添加到小时。
编辑 2
感谢安迪,我能够非常简单地解决这个问题。您要做的第一件事是将 Time 对象设置为当前用户的时区。所以:
Time.zone = @current_user.time_zone
=> "Eastern Time (US & Canada)
然后将当前用户的偏移量添加到哈希内的“小时”
hour + Time.now.in_time_zone.utc_offset / 3600
非常不言自明,但这会获取您之前设置的区域时间,并以秒为单位找到 UTC 偏移量,这就是我们除以 3600 的原因。
【问题讨论】:
-
你能澄清一下这个问题吗?您只想指定用户时区的开始/结束时间,还是只想在查询完成后将 UTC 时间转换为用户的时区?
-
查询完成后将UTC时间转换为用户所在时区
标签: ruby-on-rails utc