我有所有需要的时区信息,它会根据这个 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 的原因。