【问题标题】:What does Django Date filter mean by 'Naive'?Django 日期过滤器的“天真”是什么意思?
【发布时间】:2015-07-29 21:04:23
【问题描述】:

我想在 Django 日期过滤器中使用 'c' 日期格式。该格式引用了“幼稚”的日期。我不想在我的模板中包含时区(在我的 xml 中的其他地方)。

我不确定那是什么,django 的文档没有提到它,它引用的 PHP site 也没有。

它是什么,我该如何摆脱它?

【问题讨论】:

    标签: python django date django-template-filters


    【解决方案1】:

    文档引用了 python 日期,其中available types

    时间或datetime 类型的对象可能是幼稚的或有意识的。一个datetime 对象d 知道d.tzinfo 是否不是None 和d.tzinfo.utcoffset(d) 不返回None。如果d.tzinfoNone,或者如果d.tzinfo 不是None 但是d.tzinfo.utcoffset(d) 返回Noned 是幼稚的。 time 对象 t 是 知道t.tzinfo 是否不是Nonet.tzinfo.utcoffset(None) 是否不是 返回None。否则,t 是幼稚的。

    所以天真只是意味着它没有任何时区信息。

    要让某些东西“意识到”,请关注method unutbu

    一般来说,要让一个简单的日期时间时区感知,请使用localize method

    import datetime
    import pytz
    
    unaware = datetime.datetime(2011, 8, 15, 8, 15, 12, 0)
    aware = datetime.datetime(2011, 8, 15, 8, 15, 12, 0, pytz.UTC)
    
    now_aware = pytz.utc.localize(unaware)
    assert aware == now_aware
    

    对于 UTC 时区,没有必要使用localize 因为没有要处理的夏令时计算:

    now_aware = unaware.replace(tzinfo=pytz.UTC)
    

    有效。 (.replace 返回一个新的日期时间;它不会修改 unaware.)

    为了让它不知道将时区设置为None

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 2016-02-02
      • 2012-05-18
      • 1970-01-01
      • 2011-02-03
      • 2014-02-02
      相关资源
      最近更新 更多