【问题标题】:Formatting date times provided as strings in Django将日期时间格式化为 Django 中的字符串
【发布时间】:2010-11-02 08:01:49
【问题描述】:

在我的 Django 应用程序中,我从 Web 服务获取时间,以字符串形式提供,我在模板中使用:

{{date.string}}

这为我提供了一个日期,例如:

2009-06-11 17:02:09+0000

这些显然有点难看,我想以一种很好的格式向我的用户展示它们。 Django 有一个很棒的内置日期格式化程序,它完全可以满足我的需求:

{{ value|date:"D d M Y" }}

但是,这期望值作为日期对象提供,而不是字符串。所以我不能用这个格式化它。在 StackOverflow 上搜索后,python strptime 似乎可以满足我的要求,但是对于 Python 来说还是个新手,我想知道是否有人可以想出一种更简单的方法来使用字符串获取日期格式,而不必求助于编写一个全新的自定义 strptime模板标签?

【问题讨论】:

    标签: python django date time strptime


    【解决方案1】:

    您最好在视图代码中解析从 web 服务接收到的字符串,然后将 datetime.date(或字符串)传递给模板进行显示。 Django 模板的精神是应该在那里完成很少的编码工作;它们仅用于演示,这就是为什么它们会竭尽全力阻止您编写嵌入在 HTML 中的 Python 代码。

    类似:

    from datetime import datetime
    from django.shortcuts import render_to_response
    
    def my_view(request):
        ws_date_as_string = ... get the webservice date
        the_date = datetime.strptime(ws_date, "%Y-%m-%d %H:%M:%S+0000")
        return render_to_response('my_template.html', {'date':the_date})
    

    正如 Matthew 指出的那样,这会降低时区。如果您希望保留与 GMT 的偏移量,请尝试使用优秀的第三方 dateutils 库,它可以无缝处理多种格式和时区的日期解析,而无需提供像 strptime 这样的时间格式模板。

    【讨论】:

    • 您可能会争辩说,既然您正在格式化日期,那么在表示层(即模板)中这样做是合适的
    • 我喜欢保留我的“上下文”json-able,因为这样我也可以将它们作为 REST 响应返回。 Python datetime 不是 json-serializable,所以我宁愿在模板中进行转换。我想这可以使用模板标签来实现。
    【解决方案2】:

    这里不处理Django标签,但是strptime代码是:

    d = strptime("2009-06-11 17:02:09+0000", "%Y-%m-%d %H:%M:%S+0000")
    

    请注意,您正在删除时区信息。

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      相关资源
      最近更新 更多