【问题标题】:heroku django timestamps not converting to UTCheroku django 时间戳未转换为 UTC
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 根据您使用的数据库客户端,如果您将时间戳重新格式化为YYYY-MM-DD HH:mm:ssZ(注意Z),您将能够使用时区数据检索数据;使用它来确认它正是您所期望的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2017-04-27
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多