Python-Django 时区无法正常工作

Posted

技术标签:

【中文标题】Python-Django 时区无法正常工作【英文标题】:Python-Django timezone is not working properly 【发布时间】:2016-01-19 19:55:34 【问题描述】:

我正在开发基于 Django 的网站。我正在尝试获取正确的时区和要显示的时间。但它不能正常工作。我住在德克萨斯州达拉斯。所以我的默认时区是“美国/芝加哥”。

我的 settings.py 文件有这些代码行。

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

我安装了日期时间和 pytz。所以当我试图在数据库中节省时间时,我的代码是,

from datetime import datetime
import pytz

utc = pytz.utc

database = Database.objects.get(id=1)

databas.time = utc.localize(datetime.now())

database.save()

所以当我检查数据库时,更新时间是2015-10-20 23:13:04

而不是2015-10-20 18:13:04

当我通过下面的代码在模板中打印出来时,我得到了这个输出Oct. 20, 2015, 1:13 p.m.

 database.time|localtime 

我很困惑如何使用 datetime、pytz 和 all 来获取准确的时间以及 settings.py 文件。

我想做的是节省 UTC 时间。但是当我打印出来时,我想根据用户获取访问者的时区和打印时间。我的网站目前只能在美国访问。我的模型有

time = models.DateTimeField(auto_now_add=True)

而且它节省了一些不同的时间。我有另一个模型,其中有一个名为 expire time 的列,我使用以下代码进行保存,

expire_time = utc.localize(datetime.now()+ timedelta(hours=24))

表示我想在 24 小时后使链接失效。但是这个时区让我感到困惑。谁能帮我?我不知道我应该在我的代码中使用什么来获得正确的时区。

【问题讨论】:

【参考方案1】:

如果你设置USE_TZ = True Django 以UTC 存储日期时间。使用以下命令创建时区感知 datetime.now

from django.utils import timezone
from datetime import timedelta

database.time = timezone.now()
expire_time = timezone.now() + timedelta(hours=24)

然后您可以使用activate() 将当前时区设置为最终用户的实际时区。 查看"Selecting the current time zone" 以查看用户如何选择他的时区以及如何使用此选择来激活他的时区的示例。

【讨论】:

那么我的 settings.py 代码应该是什么?他们是正确的吗?正如我所说,models.DateTimeField(auto_now_add=True) 并没有节省 UTC 时间。我不知道为什么。 是的,您的设置看起来不错。您能否在创建新实例后发布您的“时间”字段的值? 目前没有时间码。我没有保存默认时间。我正在更新过期时间。 我认为字段models.DateTimeField(auto_now_add=True) 被称为time。无论如何,你能用这样的字段发布一个新实例的值吗?您写道,这是“节省一些不同的时间”。 我已经更新了我的代码,现在它正在按照您在回答中建议的那样工作。谢谢@Reto

以上是关于Python-Django 时区无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:无法使用 DST 使时区正常工作

python-django模板继承在引用基中的多个块时不起作用

更改标签的文本在透明小部件上无法正常工作

python-django模板继承在引用base中的多个块时不起作用

无法使用 Eclipse IDE 在 Python-Django 上创建超级用户帐户?

将印度时区转换为当地时间