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
所以,我绝对不明白发生了什么.我的错误在哪里?
基本上发生的情况是时间使用时间戳存储在数据库中,但使用数据库中指定的时区显示时间,除非手动更改是计算机的时区.但是由于你在django中指定了一个不同的时区,django会调整差异.所以你需要做的是将db中的时区更改为UTC(进程因引擎而异)
我喜欢这样做的方法是保持数据库时区不变,在django设置中指定'UTC',然后每当向用户显示时间时,使用一些javascript将其转换为本地用户时间.
编辑
之前没有注意到你正在使用PostgreSQL.我想你可以在postgresql.conf中更改时区或在数据库中将TimeZone变量更改为UTC
| 归档时间: |
|
| 查看次数: |
6650 次 |
| 最近记录: |