【问题标题】:Django ReportLab TimezoneDjango ReportLab 时区
【发布时间】:2015-03-04 06:08:39
【问题描述】:

我在 Django 中使用 ReportLab。我有一个具有以下字段的模型:

time_stamp = models.DateTimeField(auto_now_add=True)

我在 settings.py 中的TIME_ZONE 变量设置为:

Africa/Johannesburg

我使用一个表单集来填充这个模型。 time_stamp 字段使用正确的时区正确保存,但是当我将 time_stamp 放在 ReportLab pdf 中时,时区设置为 UTC。

例如: time_stamp 在保存的模型中(str(time_stamp)[:19] 是:

2015-03-04 07:57:28

但是time_stamp在pdf文档中(因为str(time_stamp)[:19]是:

2015-03-04 05:57:28

正好提前 2 小时(非洲/约翰内斯堡是 UTC + 2 小时)。

如何设置 ReportLab 的时区?生成pdf时是否应该在settings.py或views.py中指定?如果没有解决办法,如何给time_stamp加2小时?

一些答案​​建议将auto_now_add=True 更改为default=datetime.datetime.now(),但这会在迁移数据库时产生警告(使用朴素表达式)。

【问题讨论】:

  • 你的设置中 USE_TZ 的值是多少?
  • 没有注意到设置 - 将其更改为 USE_TZ=False 并且可以正常工作!感谢您的提示!

标签: django timezone reportlab


【解决方案1】:

我不是 Reportlab 的用户,但总的来说,我认为设置 USE_TZ=False 不是解决问题的正确方法。将其设置回 True ,而不是像这样自己截断时间戳:

str(time_stamp)[:19]

您应该尝试在模板中应用 Django 的 date template filter,例如:

{{ time_stamp|date:"SHORT_DATETIME_FORMAT" }}

Django 处理时区的方式可能令人困惑。但最佳做法是在您的数据库中以 UTC 格式保存时间戳。您可能想参考 Django 的时区常见问题解答:

https://docs.djangoproject.com/en/dev/topics/i18n/timezones/#time-zones-faq

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多