Django应用程序在使用Heroku托管时不显示本地时间
这里是初学者Django程序员。我正在开发Django应用程序,并且有时区问题。当我在本地服务器上运行时,我的代码成功地将时间对象转换为本地时间,但当我的应用程序托管在Heroku上时,此转换不起作用 我目前正在使用tzlocal扩展转换时区。在我看来,我使用以下代码:Django应用程序在使用Heroku托管时不显示本地时间,django,heroku,time,timezone,datetime-format,Django,Heroku,Time,Timezone,Datetime Format,这里是初学者Django程序员。我正在开发Django应用程序,并且有时区问题。当我在本地服务器上运行时,我的代码成功地将时间对象转换为本地时间,但当我的应用程序托管在Heroku上时,此转换不起作用 我目前正在使用tzlocal扩展转换时区。在我看来,我使用以下代码: activate(get_localzone()) 在我的本地服务器上,get_localzone()成功返回本地时间。在Heroku托管的我的应用程序版本上,get_localzone()返回UTC 以下是我在setting
activate(get_localzone())
在我的本地服务器上,get_localzone()成功返回本地时间。在Heroku托管的我的应用程序版本上,get_localzone()返回UTC
以下是我在settings.py中的时间设置:
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
不确定这是否重要,但我正在使用Postgres数据库:
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
以下是我的主页视图示例,让您了解我是如何使用tzlocal软件包的:
def home(请求):
如果不是,则请求。用户。是否经过身份验证()
返回呈现(请求'idealist/index.html')
其他:
context=RequestContext(请求)
激活(获取\u localzone())
user=UserProfile.objects.filter(user=request.user)[0]
user\u projects=user.projects()
此外,以下是我正在导入的其他与时间相关的软件包:
from django.utils.timezone import *
import pytz
from tzlocal import *
import datetime
from pytz import timezone
非常感谢你的帮助。如果有任何其他信息我可以提供给你,请让我知道 在回答一条建议之前,不要存储本地化时区。始终以UTC格式存储日期,并根据需要在应用程序上进行转换
get\u localzone()
可能正在拾取服务器时区,您的时区位于您所称的本地时区中,而heroku服务器可能已设置为UTC。您有几个选择:
1) 将服务器时区设置为所需的任何时区
我不是100%肯定这会奏效,但也许值得一试。也许将TZ变量设置为您想要的时区将使其成为本地时区。尝试使用:
heroku config:add TZ="America/Los_Angeles"
替换为所需的
2) 强制django使用您想要的时区
这可能是一个更好的选择,因为在您更改提供程序或heroku服务器时,您不必记住再次设置时区
而不是直接在您想要的时区名称中使用get_localzone()pass,如下所示:
timezone.activate(pytz.timezone('America/Los_Angeles'))
我假设您始终希望在整个应用程序中使用相同的时区,但如果您希望允许用户选择自己的时区,则可以将该值存储在用户会话或配置文件中
timezone.activate(pytz.timezone('America/Los_Angeles'))