【发布时间】:2018-08-14 15:28:22
【问题描述】:
我有一个 Django 应用程序(使用 Postgres 在 Heroku 上运行),它有一个包含 DateTimeField() 的简单表单:
class Response(models.Model):
'''
Model serves to record a users response to a given question on a given
questionnaire.
'''
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.PROTECT,
default=None,
db_index=True,
)
date = models.DateTimeField(
blank=False,
auto_now_add=True,
db_index=True,
help_text=(
"Date on which question was answered."
)
)
据我了解,我的 date 字段应该会自动填充当前日期时间
对于 DateTimeField:default=timezone.now - 来自 django.utils.timezone.now()
-- ref
此外,它应该是 UTC 时间戳
如果 USE_TZ 为 True,这将是一个感知日期时间,以 UTC 表示当前时间。
-- ref
我的 settings.py 有
TIME_ZONE = 'UTC'
USE_TZ = True
我还有一些将当前时区设置为 CST 的中间件:
from django.utils import timezone
import pytz
class TimezoneMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated():
timezone.activate(pytz.timezone('America/Chicago'))
else:
timezone.deactivate()
我在表单提交 [print(now(), localtime(now()), get_current_timezone())] 之前使用了一些调试打印语句来验证 now() 实际上是 UTC。
当我提交表单时,我看到了:
2018-03-06T16:56:23.569311+00:00 应用[web.1]: 2018-03-06 16:56:23.569131+00:00 2018-03-06 10:56:23.569145-06: 00 美国/芝加哥
但是数据库存储2018-03-06 10:56:23
如何确保我提交的时间戳正确转换为 UTC?
【问题讨论】:
-
postgres;我不是在确定价值;它是自动确定的,因为我使用的是
auto_now_add=True -
啊,好问题。我正在使用数据库客户端(dbbeaver)来检查存储的内容;我更改了它的设置以显示时间戳的时区偏移量,现在我看到了
2018-03-06 10:56:23-0600;所以看起来正确的时间戳正在被存储!随意按照这些思路提交答案,我会接受。
标签: django datetime heroku utc