Форматирование даты и времени в виде строк в Django - PullRequest
9 голосов
/ 12 июня 2009

В моем приложении Django я получаю время от веб-службы, представленной в виде строки, которую я использую в своих шаблонах:

{{date.string}}

Это дает мне дату, такую ​​как:

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

Это, конечно, немного некрасиво, и я хотел бы представить их в хорошем формате для моих пользователей. Django имеет отличный встроенный форматер даты, который будет делать именно то, что я хотел:

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

Однако ожидается, что значение будет предоставлено как объект даты, а не как строка. Поэтому я не могу отформатировать его, используя это. После поиска здесь в StackOverflow pythons strptime, кажется, делает то, что я хочу, но, будучи довольно новым для Python, я подумал, может ли кто-нибудь придумать более простой способ получения форматирования даты с использованием строк, не прибегая к написанию совершенно нового пользовательского strptime тег шаблона?

Ответы [ 2 ]

11 голосов
/ 12 июня 2009

Возможно, вам лучше проанализировать строку, полученную от веб-службы, в вашем коде представления, а затем передать datetime.date (или строку) в шаблон для отображения. Суть шаблонов Django заключается в том, что там нужно выполнять очень мало работ по кодированию; они предназначены только для презентации, и поэтому стараются изо всех сил помешать вам писать код Python, встроенный в HTML.

Что-то вроде:

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})

Как указывает Мэтью, это сбрасывает часовой пояс. Если вы хотите сохранить смещение от GMT, попробуйте использовать превосходную стороннюю библиотеку dateutils , которая без проблем обрабатывает даты в разных форматах и ​​с часовыми поясами, не предоставляя шаблон формата времени, например strptime.

0 голосов
/ 12 июня 2009

Это не относится к тегу Django, но код strptime:

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

Обратите внимание, что вы сбрасываете информацию о часовом поясе.

...