Return 行基于各自时区的时间戳

Return rows based on timestamp respective to their time zone

我有一个 table,其中每一行代表一个用户。我还将用户的时区存储为文本,例如 'America/Denver'、'America/New_York' 等

是否可以编写一个查询,让 return 用户的当前时间在他们所在时区的下午 1 点到晚上 11 点之间?

SELECT CONVERT_TZ(FROM_UNIXTIME(1196440219),'GMT','America/Denver');

SELECT * 从 table 哪里 DATE_FORMAT(CONVERT_TZ(FROM_UNIXTIME(timestamp_column),'GMT','America/Denver'),'%H') 在 13 和 23 之间

鉴于此 table:

CREATE TABLE usr (
   usr_id serial PRIMARY KEY
,  usr    text NOT NULL
,  tz     text  -- time zone names
);

使用AT TIME ZONE结构:

SELECT *, (now() AT TIME ZONE tz)::time AS local_time
FROM   usr
WHERE  (now() AT TIME ZONE tz)::time BETWEEN '13:00'::time AND '23:00'::time;

包括上限和下限下午 1 点和晚上 11 点。

SQL Fiddle.

AT TIME ZONE 的详细信息:

  • Ignoring timezones altogether in Rails and PostgreSQL