heroku django时间戳未转换为UTC

时间:2018-03-06 17:15:38

标签: django datetime heroku utc

我有一个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 app [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?

1 个答案:

答案 0 :(得分:1)

  

但数据库存储2018-03-06 10:56:23

我会更仔细地研究它;根据您获得该值的方式,它可能是也可能不是实际存储在数据库中的内容。数据库驱动程序(当然还有Django本身)可以在数据库的路上更改时区。如果它通过数据库驱动程序来检查该值的时区,您可能会发现毕竟没有问题。