【问题标题】:Django template tag, python timezone aware dates different resultsDjango模板标签,python时区感知日期不同的结果
【发布时间】:2014-12-04 08:40:28
【问题描述】:

我有:

TIME_ZONE = 'Europe/Paris'
USE_L10N = True
USE_TZ = True

在我的 settings.py 文件中。我住在伊斯坦布尔/土耳其,巴黎和伊斯坦布尔之间相差一小时。

在管理端选择日期时,django 正确显示 1 小时差。并使用模板标签,我得到了我在管理员中设置的日期时间。

但是当我使用 beginning_date.strftime("%H:%M") 通过 python 传递日期时间时,python 从通过管理员设置的值中减去 1 小时,这是不正确的。

我该如何解决这个问题?

【问题讨论】:

    标签: django


    【解决方案1】:

    使用 Django 模板 defaultfilters 在 Python 代码中格式化日期。

    from django.template.defaultfilters import date as _date
    
    _date(datetime_object, "%H:%M")
    

    而且,也许相关:Django 无法在 Windows 中可靠地使用备用时区。 See documentation.

    【讨论】:

    • 我在 python 代码中使用了 _date(datetime_object, "H:i")。但是还存在额外的 1 小时差异?
    • 你认为是不是和我的操作系统的时间设置有关。也许python的行为是真的,所以#Kevin的回答可能是真的......
    • 不,如果您在 OSX 上,那么它与操作系统无关。试试@KevinChristopherHenry 的回答。 docs.djangoproject.com/en/dev/ref/utils/… 是正确的。但是 django.template.defaultfilters 并没有错:它处理模板中的日期时间:从 Python 调用相同的过滤器应该会给你相同的结果。如果这不能解决您的问题,那么可能还有其他问题。阅读所有相关文档并仔细检查您的设置。 docs.djangoproject.com/en/dev/topics/i18n/timezones
    【解决方案2】:

    我认为土耳其与此无关。

    我的猜测是,您看到的一小时差异是在巴黎时区(默认情况下用于解释和显示日期)和 UTC(用于存储datetime)之间,并且是从数据库返回的datetime 的时区。

    如果正确,那么您可以使用django.utils.timezone.localtimedatetime 转换为当前时区(默认为TIME_ZONE):

    localtime(beginning_date).strftime("%H:%M")
    

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 2017-06-26
      • 2018-04-23
      • 2013-02-27
      • 2012-08-10
      • 2019-01-18
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多