【问题标题】:How to correct wrong timezone offset in pytz and django?如何纠正 pytz 和 django 中错误的时区偏移?
【发布时间】:2016-08-16 07:19:54
【问题描述】:

我正在用 django 编写一个项目。

我正在使用时区“亚洲/上海”,当我获取日期时间对象时,时区的偏移量不正确并且是:

<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>

并且偏移量应该是+8:00:00 AFAICR,这个问题以前不存在。

我该如何解决这个问题?

【问题讨论】:

  • 您应该显示创建datetime 对象的行。提到什么是USE_TZ(应该是True)、TIME_ZONE(默认时区)和当前时区(由django.utils.timezone.activate()激活)。
  • 这显然是一个已知的 pytz 错误:answers.launchpad.net/pytz/+question/186082。这个 pytz 常见问题解答可能会有所帮助:answers.launchpad.net/pytz/+faq/1.
  • @evergreen:这不是错误。 pytz docs say at the top that localize() should be used。无论如何,如果你使用 django 的时区 API,那么你不需要知道 pytz API,即熟悉一个 API(django 或 pytz)就足够了。
  • @J.F. Sebastian:正如 OP 所指出的,我所指的错误是 pytz 对亚洲/上海时区的偏移量不正确。也许错字是比错误更好的描述。您对文档说应该使用 localize() 是正确的。这就是我参考常见问题解答的原因。
  • @evergreen 再次,没有错误。 pytz 具有正确的时区信息(在不同的日期有多个 UTC 偏移量)。 OP 错误地使用了库——选择了错误的 UTC 偏移量。常见问题解答以及文档说明了应该如何使用它(以获得正确的 UTC 偏移量)。

标签: python django datetime pytz


【解决方案1】:

你可以在 django 中使用这个函数:

def add_local_tz_to_native_time(native_dt):
  # type: (datetime.datetime) -> datetime.datetime
  from django.utils import timezone

  if timezone.pytz is None:
    return native_dt.replace(tzinfo=timezone.get_current_timezone())
  else:
    return timezone.get_current_timezone().localize(native_dt)

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 2013-08-10
    • 2020-07-16
    • 2018-02-12
    • 2019-05-23
    • 2020-10-11
    • 2011-11-18
    • 2021-03-02
    • 2013-07-28
    相关资源
    最近更新 更多