【问题标题】:Timezone issues when running my django app on Heroku在 Heroku 上运行我的 django 应用程序时出现时区问题
【发布时间】:2020-06-22 15:46:40
【问题描述】:

我正在使用 Django 创建一个日程安排应用程序。根据有关该主题的大多数建议,约会(在我的约会模型中)以 UTC 时区格式存储。所以我的 settings.py 设置为 TIME_ZONE = 'UTC'。该应用程序在我的本地服务器上运行良好,但是当我将它部署到 Heroku 时,我开始遇到问题。

给你一个例子(在生产中):

>>> heroku run bash
>>> python manage.py shell
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2020, 3, 10, 17, 10, 10, 453536)

然而,在本地,我得到:

datetime.datetime(2020, 3, 10, 13, 10, 10, 196794)

我尝试通过将应用程序的 TZ 配置值更改为我的本地时间来解决问题(即 4 小时差异),如下所示:

heroku config:add TZ='America/Toronto'

运气不好。任何人都明白为什么会这样?有关如何解决此问题的任何建议?

【问题讨论】:

标签: django datetime heroku timezone web-deployment


【解决方案1】:

试试这个;

import pytz
from datetime import datetime

tz = pytz.timezone('America/Toronto')
print(datetime.now(tz))

这将根据您的时区(美国/多伦多)打印当前日期时间

【讨论】:

    【解决方案2】:

    用途:

    datetime.datetime.utcnow()
    

    或者,基于文档最佳实践:

    datetime.datetime.now(timezone.utc)
    
    datetime.datetime(2020, 3, 11, 19, 33, 32, 335610)
    >>> datetime.datetime.utcnow()
    datetime.datetime(2020, 3, 11, 18, 33, 37, 582409)
    >>>
    
    >>> datetime.datetime.now(datetime.timezone.utc)
    datetime.datetime(2020, 3, 11, 18, 32, 56, 146774, tzinfo=datetime.timezone.utc)
    

    【讨论】:

    • timezone.now() 是最佳实践,我在所有应用程序中都使用相同的方法。到目前为止,这没有问题。
    • 这似乎不起作用。无论有没有 .utcnow(),我都会得到相同的时间
    • @MaximVallee 它工作得很好。看看我更新的答案。
    • @Sam 我想你误解了我的问题。您建议的解决方案返回 Heroku 服务器的时间,这与我的本地时间不同。
    猜你喜欢
    • 2012-09-08
    • 2018-11-20
    • 2016-09-06
    • 1970-01-01
    • 2019-11-07
    • 2013-10-23
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多