Ruby on rails 3 转换用户时区中的日和小时
我想将组日期(天+小时)转换为用户时区以显示列表,我不想更新数据库。我有几个小组,这个代码非常慢Ruby on rails 3 转换用户时区中的日和小时,ruby-on-rails-3,postgresql,timezone,Ruby On Rails 3,Postgresql,Timezone,我想将组日期(天+小时)转换为用户时区以显示列表,我不想更新数据库。我有几个小组,这个代码非常慢 # GROUP.RB # day -> Date # hour -> Time # wday -> Integer . . groups.each do |g| new_day = g.in_gmt_day(user_time_zone) # <-- Concat group.day with group.hour and convert the result da
# GROUP.RB
# day -> Date
# hour -> Time
# wday -> Integer
.
.
groups.each do |g|
new_day = g.in_gmt_day(user_time_zone) # <-- Concat group.day with group.hour and convert the result day with the user time zone.
g.wday = new_day.wday
g.hour = new_day
end
.
.
#GROUP.RB
#日期->日期
#小时->时间
#wday->Integer
.
.
组。每个组都有| g|
new_day=g.in_gmt_day(用户时区)#让Postgres为您做这件事:
SELECT (day + hour) AT TIME ZONE '<source tz>' AT TIME ZONE 'localtime'
FROM groups;
在源的时区设置此时间戳,让我们以“Europe/London”为例。结果是带有时区的时间戳(简称timestamptz
):
显示等效的本地时间戳[无时区]
:
(day + hour) AT TIME ZONE 'Europe/London' AT TIME ZONE 'localtime'
从这里,您可以对该值执行任何操作,例如在一天内和一次内拆分,或者使用to_char()
以任何方式格式化它:
您是否有可能更改存储,以便存储一个带有时区的时间戳,如2012-01-01 11:00:00 UTC
(日期2012-01-01,11小时)?这会让一切变得容易得多。
(day + hour) AT TIME ZONE 'Europe/London'
(day + hour) AT TIME ZONE 'Europe/London' AT TIME ZONE 'localtime'
WITH x AS (
SELECT (day + hour) AT TIME ZONE 'Europe/London' AT TIME ZONE 'localtime' AS ts
FROM groups
)
SELECT ts::date AS day, ts::time AS hour, to_char(ts, 'HH24') AS h24
FROM x;