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

时间:2012-03-22 01:53:47

标签: django postgresql timezone postgresql-9.1

在Django documentation for setting timezone中,时区的list of available choices实际上是postgres时区参数字符串。所以似乎Django使用Postgres来检索时间。

如果是这样,那么问题在于IST用于表示Indian和& Israel标准时间,但postgres使用IST表示以色列标准时间(可能会混淆世界人口的第6位)并且印度标准时间没有时区字符串。

不仅如此,Postgres还错过了其他一些国家的时区,如尼泊尔(格林威治标准时间+5:30)和一些太平洋岛屿。

那么,有什么方法可以在Postgres或Django中设置自定义时区字符串(例如GMT + 5:30 for India,GMT + 5:45 for Nepal等)?

1 个答案:

答案 0 :(得分:5)

印度:

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;

关于AT TIME ZONE构造的PostgreSQL手册。关于time zones