[英]How to get time in specific time zone in PostgreSQL?
这个问题被问了很多次。 但是没有一个实现能给我正确的答案。 我正在尝试在 select 查询中将UTC
日期/时间转换为IST
(印度标准时间)。
目前,它是 18:something in IST。 在 UTC 中是 12:something。
我用他们的 output 尝试过的事情:
START_TIME(输入):'2021-10-01 12:43:24.014902+00'
START_TIME AT TIME ZONE 'IST'
→ 2021-10-01T10:43:24.014Z
(START_TIME AT TIME ZONE 'UTC')::TIMESTAMP AT TIME ZONE 'IST'
→ 2021-10-01T10:43:24.014Z
(START_TIME AT TIME ZONE 'UTC') AT TIME ZONE 'IST'
→ 2021-10-01T09:13:24.014Z
(START_TIME::TIMESTAMP) AT TIME ZONE INTERVAL '+05:30'
→ 2021-10-01T07:13:24.014Z
而它应该给我2021-10-01T18:xx:xx.xxxx
我错过了什么?
UPDATE: (START_TIME AT TIME ZONE 'UTC') + INTERVAL '05:30 HOURS' AS DATE
给出了期望的结果。 但是自己添加偏移量是一种不好的做法吗?
时区缩写不明确:
SELECT * FROM pg_timezone_names WHERE abbrev = 'IST';
name │ abbrev │ utc_offset │ is_dst
═════════════════════╪════════╪════════════╪════════
Eire │ IST │ 01:00:00 │ f
Asia/Calcutta │ IST │ 05:30:00 │ f
Asia/Kolkata │ IST │ 05:30:00 │ f
Europe/Dublin │ IST │ 01:00:00 │ f
posix/Eire │ IST │ 01:00:00 │ f
posix/Asia/Calcutta │ IST │ 05:30:00 │ f
posix/Asia/Kolkata │ IST │ 05:30:00 │ f
posix/Europe/Dublin │ IST │ 01:00:00 │ f
(8 rows)
具体并使用明确的时区名称:
SELECT TIMESTAMP '2021-10-01 12:43:24.014902'
AT TIME ZONE 'UTC' /* how late is it when an UTC clock shows the above? */
AT TIME ZONE 'Asia/Kolkata' /* What does an Indian clock show at that time? */;
timezone
════════════════════════════
2021-10-01 18:13:24.014902
(1 row)
看,如果你有一个没有时区列的时间戳,并且你将时间戳存储为 UTC,你需要告诉 PostgreSQL,然后告诉它把它转换成你当地的时区。 希望这个例子会有所帮助:
select created_at at time zone 'utc' at time zone 'Asia/Kolkata'
from users;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.