Django ReportLab时区
我在Django使用ReportLab。我有一个具有以下字段的模型:Django ReportLab时区,django,timezone,reportlab,Django,Timezone,Reportlab,我在Django使用ReportLab。我有一个具有以下字段的模型: time_stamp = models.DateTimeField(auto_now_add=True) 设置.py中的my时区变量设置为: Africa/Johannesburg 我使用一个表单集来填充这个模型。time_stamp字段使用正确的时区正确保存,但当我将time_stamp放入ReportLab pdf中时,时区设置为UTC 例如: 保存的模型中的time\u stamp(作为str(time\u stam
time_stamp = models.DateTimeField(auto_now_add=True)
设置.py中的my时区变量设置为:
Africa/Johannesburg
我使用一个表单集来填充这个模型。time_stamp字段使用正确的时区正确保存,但当我将time_stamp放入ReportLab pdf中时,时区设置为UTC
例如:
保存的模型中的time\u stamp
(作为str(time\u stamp)[:19]
是:
2015-03-04 07:57:28
2015-03-04 05:57:28
但是pdf文档中的时间戳是:
2015-03-04 07:57:28
2015-03-04 05:57:28
正好提前2小时(非洲/约翰内斯堡是UTC+2小时)
如何设置ReportLab的时区?生成pdf时应在settings.py或views.py中指定时区?如果没有解决方案,如何在时间戳中添加2小时
一些答案建议使用default=datetime.datetime.now()
更改auto\u now\u add=True
,但这会在迁移数据库时产生警告(使用了朴素表达式).我不是Reportlab的用户,但总的来说,我不认为设置USE_TZ=False是解决问题的正确方法。请将其设置为True,而不是自己截断时间戳,如:
str(time_stamp)[:19]
您应该尝试在模板中应用Django,例如:
{{ time_stamp|date:"SHORT_DATETIME_FORMAT" }}
Django如何处理时区可能会让人困惑。但最好的做法是在数据库中以UTC格式保存时间戳。您可能需要参考Django的时区常见问题解答:
在您的设置中,USE_TZ的值是多少?没有注意到该设置-将其更改为USE_TZ=False,它就可以工作了!感谢您的提示!