如何将时区应用于 Django 模型 DateTimeFields

How to apply timezones to Django Model DateTimeFields

当 Django 模型包含 DateTimeField 时,日期始终以 UTC 时区保存。如果您添加具有时区的日期,则信息将被翻译并以不同方式检索。即使 TIME_ZONE 已在 settings.py 中设置并且日期是使用 timezone.localtime(timezone.now()) 创建的,也会发生这种情况。动态添加日期时会发生同样的问题,例如 models.DateTimeField(auto_now_add=True)models.DateTimeField(auto_now=True).

如何检索或保存正确时区的日期时间?

日期可能以 UTC 格式显示,但您始终可以将其转换回正确的时区。

from django.conf import settings
from django.utils import timezone

def getTimezone():
    return pytz.timezone(settings.TIME_ZONE)

model.myDateTimeField.astimezone(getTimezone()) # Converts UTC to the timezone in settings.py

如果日期时间完全保存在不同的时区,这将不起作用。我猜别那样做。