在Django/PostgreSQL中设置自定义时区(印度标准时间)

4
在 Django 设置时区的文档 中,可用时区选择列表 实际上是 postgres 时区参数字符串。因此,Django 使用 Postgres 检索时间。
如果是这样,那么问题在于 IST 用于表示 印度以色列 标准时间,但是 postgres 使用 IST 表示以色列标准时间(可能会混淆全球六分之一的人口),而印度标准时间没有时区字符串。
不仅如此,Postgres 还缺少一些其他国家的时区,比如尼泊尔(GMT+5:30)和一些太平洋岛屿。
那么,我是否可以在 Postgres 或 Django 中设置自定义时区字符串(例如印度的 GMT+5:30,尼泊尔的 GMT+5:45 等)?
1个回答

7
对于印度:
SELECT now() AT TIME ZONE 'Asia/Calcutta';
SELECT now()::timestamp AT TIME ZONE 'Asia/Kolkata';
SELECT now()::timestamp AT TIME ZONE '5:30';

对于尼泊尔:
SELECT now()::timestamp AT TIME ZONE 'Asia/Katmandu';
SELECT now()::timestamp AT TIME ZONE 'NPT';

设置整个会话的时区:

SET time zone 'Asia/Calcutta';

要将其重置为在postgresql.conf中设置的时区,请执行以下操作:
RESET time zone;

在系统视图pg_timezone_namespg_timezone_abbrevs中查找更多信息。
SELECT *
FROM   pg_timezone_names
WHERE  utc_offset BETWEEN '05:00:00' AND '06:00:00'
ORDER  BY utc_offset;

SELECT *
FROM   pg_timezone_abbrevs
WHERE  utc_offset BETWEEN '05:00:00' AND '06:00:00'
ORDER  BY utc_offset;

PostgreSQL手册关于AT TIME ZONE结构的介绍。关于时区


我知道,加尔各答的名字在2001年改为了“Kolkata”。但是Postgres似乎没有心情跟上这些变化。顺便说一句,那个方法可行。谢谢! - user1144616
@user1144616:很酷,它可以工作。你可能在我的帖子中错过了Asia/Kolkata - Erwin Brandstetter
Postgres确实会跟踪tzdata的更改,但如果你真的在使用你问题中链接的8.1版本,那么这个版本已经不再维护了。 - araqnid
@ErwinBrandstetter: 哦,是的,我错过了Asia/Kolkata。 @araqnid: 我正在使用9.1版本,但我找不到相关的9.1文档,所以发了8.1版本的。 - user1144616
@user1144616:我修复了链接。这里有更多关于PostgreSQL文档版本控制的信息 - Erwin Brandstetter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接