ruby-on-rails - rails/PostgreSQL : How can I quickly group records using a datetime field by date in a specific time zone?

标签 ruby-on-rails postgresql timezone

我将 postgresql 与 Ruby on Rails 结合使用。现在我正在使用它来计算每天注册的用户数量:

@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(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”的含义并不完全清楚。但无论哪种方式,您都可以使用该构造实现它。

关于ruby-on-rails - rails/PostgreSQL : How can I quickly group records using a datetime field by date in a specific time zone?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8349478/

相关文章:

ruby-on-rails - windows 上的 therubyracer gem

sql - Postgres - 如何加密列及其数据

ruby - 将元素添加到 postgres 数组字段失败,同时替换整个数组有效

postgresql - 循环遍历 RECORD 的列

java - 按天分组并获取 MongoDB 中时区的最近 7 天数据

javascript - 通过 js.erb 文件渲染 Flash 信息

ruby-on-rails - Ruby:如何向对象添加方法? (或者简单地扩展对象类)

javascript - 切换文本字段的按钮,true 和 false

java - 如何使用 Spring 调度程序在每个时区的凌晨 0 点做一些工作?

ruby-on-rails - 匿名 block 转发 (&block) 在 Ruby 中如何工作?