Django和时区

Tom*_*Tom 5 python django datetime pytz

Django 1.7,PostgreSQL.

我想以UTC格式存储日期时间并将其显示在PST时区中.

我当地时间:上午8:05

UTC时间:凌晨1点05分

PST时间:下午6:05

Django doc:

When support for time zones is enabled, Django stores date and time 
information in UTC in the database, uses time-zone-aware datetime objects 
internally, and translates them to the end user’s time zone in templates 
and forms.
Run Code Online (Sandbox Code Playgroud)

setting.py

USE_TZ = True
TIME_ZONE = 'US/Pacific'
Run Code Online (Sandbox Code Playgroud)

模型领域

created_at = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

我创建了新模型,在django admin中显示PST时间(下午6:05).没关系.但如果我这样做:

select created_at from my_table where id = 1;
Run Code Online (Sandbox Code Playgroud)

它显示我当地时间(上午8:05)!所以,我不确定这是存储在UTC时间.

还有一件事.

通常的日期时间字段,我在管理员这个日期设置:2014-10-25 18:00:00

ID于2014年10月25日下午6点在管理员中显示

但是从DB中选择让我看看:

2014-10- 26 08:00:00.0

所以,我绝对不明白发生了什么.我的错误在哪里?

leh*_*ins 6

基本上发生的情况是时间使用时间戳存储在数据库中,但使用数据库中指定的时区显示时间,除非手动更改是计算机的时区.但是由于你在django中指定了一个不同的时区,django会调整差异.所以你需要做的是将db中的时区更改为UTC(进程因引擎而异)

我喜欢这样做的方法是保持数据库时区不变,在django设置中指定'UTC',然后每当向用户显示时间时,使用一些javascript将其转换为本地用户时间.

编辑

之前没有注意到你正在使用PostgreSQL.我想你可以在postgresql.conf中更改时区或在数据库中将TimeZone变量更改为UTC