Jam*_*mes 6 postgresql timezone ruby-on-rails
我在Ruby on Rails上使用postgresql.现在我用它来计算每天注册的用户数量:
@users_signup_by_day = User.count(:order => 'DATE(created_at) DESC', :group => ["DATE(created_at)"])
Run Code Online (Sandbox Code Playgroud)
这有效,但用户根据UTC分组.如何根据EST对用户进行分组?
更新
用户根据UTC分组.如何根据EST对用户进行分组?
澄清:以UTC开始和结束的特定日期与EST开始和结束的同一日期不同.现在,上述命令生成的查询将创建用户的日期时间视为UTC,并根据该时间跨度对用户进行分组.考虑到我想根据EST而不是UTC按日期分组,我该如何弥补这一点?
我尝试了以下(感谢Erwin Brandstetter):
User.count(:order => "DATE(created_at AT TIME ZONE 'EST') DESC", :group => ["DATE(created_at AT TIME ZONE 'EST')"])
Run Code Online (Sandbox Code Playgroud)
但这并没有给出正确的结果,因为第一个结果是
["2011-12-02", 276]
Run Code Online (Sandbox Code Playgroud)
并且它不是12/02/2011在EST(UTC - 5小时).我很感激任何帮助.
您可以timestamp_column AT TIME ZONE 'EST'在转换为日期之前使用该表达式.考虑这个演示:
SELECT t AS ts_utc
,t::date AS date_utc
,t AT TIME ZONE 'EST' AS ts_est
,(t AT TIME ZONE 'EST')::date AS date_est
FROM (
VALUES
('2011-12-1 03:00'::timestamp) -- defaults to timestamp without time zone
,('2011-12-2 12:00')
,('2011-12-3 23:00')) t(t);
Run Code Online (Sandbox Code Playgroud)
结果:
ts_utc | date_utc | ts_est | date_est
---------------------+------------+------------------------+------------
2011-12-01 03:00:00 | 2011-12-01 | 2011-12-01 09:00:00+01 | 2011-12-01
2011-12-02 12:00:00 | 2011-12-02 | 2011-12-02 18:00:00+01 | 2011-12-02
2011-12-03 23:00:00 | 2011-12-03 | 2011-12-04 05:00:00+01 | 2011-12-04
Run Code Online (Sandbox Code Playgroud)
ts_est 构成该时区的文字给定时间,自动转换为当前位置的时区进行显示,在我的情况下为"+01",因为我的数据库服务器位于奥地利维也纳,并且具有匹配的区域设置.
你的问题并不完全清楚,"根据EST"的含义是什么.但无论如何,你可以用这种结构实现它.
| 归档时间: |
|
| 查看次数: |
2177 次 |
| 最近记录: |