加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails / Postgresql:如何在特定时区按日期使

发布时间:2020-12-17 03:28:10 所属栏目:百科 来源:网络整理
导读:我在 Ruby on Rails上使用postgresql.现在我用它来计算每天注册的用户数量: @users_signup_by_day = User.count(:order = 'DATE(created_at) DESC',:group = ["DATE(created_at)"]) 这有效,但用户根据UTC分组.如何根据EST对用户进行分组? 更新 the users a
我在 Ruby on Rails上使用postgresql.现在我用它来计算每天注册的用户数量:

@users_signup_by_day = User.count(:order => 'DATE(created_at) DESC',:group => ["DATE(created_at)"])

这有效,但用户根据UTC分组.如何根据EST对用户进行分组?

更新

the users are grouped according to UTC. How can I group the users
according to 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')"])

但这并没有给出正确的结果,因为第一个结果是

["2011-12-02",276]

并且它不是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);

结果:

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

ts_est构成该时区的文字给定时间,它会自动转换为当前位置的时区以供显示,在我的情况下为’01’,因为我的数据库服务器位于奥地利维也纳并且具有匹配的区域设置.

你的问题并不完全清楚,“根据EST”的含义是什么.但无论如何,你可以用这种结构实现它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读