Работаете с датами в Джанго? Модуль datetime в Python предлагает классы для удобного управления датами и временем. Вы можете отформатировать любую дату Python (при условии, что это объект datetime), используя метод strftime.
Форматирование даты
Объект datetime будет иметь метод strftime это позволяет вам предоставлять произвольный формат даты и печатать ее в виде строки, где вам нужно. Вы можете указать, как и где каждая часть даты должна отображаться со следующими идентификаторами:
%a | Сокращенное название дня недели. |
%A | Полное название дня недели. |
%b | Сокращенное название месяца в локали. |
%B | Полное название месяца в локали. |
%c | Соответствующая локали дата и время. |
%d | День месяца в виде десятичного числа [01,31]. |
%H | Час (24-часовые часы) в виде десятичного числа [00,23]. |
%I | Час (12-часовые часы) в виде десятичного числа [01,12]. |
%j | День года в виде десятичного числа [001,366]. |
%m | Месяц как десятичное число [01,12]. |
%M | Минута в виде десятичного числа [00,59]. |
%p | Локальный эквивалент либо AM, либо PM. |
%S | Второй как десятичное число [00,61]. |
%U | Номер недели в году (воскресенье как первый день недели) в виде десятичного числа [00,53]. Все дни в новом году, предшествующем первому воскресенью, считаются на неделе 0. |
%w | День недели в виде десятичного числа [0 (воскресенье), 6]. |
%W | Номер недели в году (понедельник — первый день недели) в виде десятичного числа [00,53]. Все дни в новом году, предшествующем первому понедельнику, считаются на неделе 0. |
%x | Соответствующая дата локали. |
%X | Соответствующее время локали. |
%y | Год без века как десятичное число [00,99]. |
%Y | Год с веком как десятичное число. |
%Z | Название часового пояса (без символов, если часовой пояс не существует). |
%% | Буквальный '%' персонаж. |
В представлении
Внутри контроллера у вас есть доступ непосредственно к объекту datetime. Это означает, что вы можете просто выполнить функцию strftime и передать строку формата в качестве первого аргумента:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
# Import Datetime
from datetime import datetime
def index(request):
# return HttpResponse("Hello, world !")
# Some Date Object, for example a default generated by datetime
myDate = datetime.now()
# Give a format to the date
# Displays something like: Aug. 27, 2017, 2:57 p.m.
formatedDate = myDate.strftime("%Y-%m-%d %H:%M:%S")
# Do something with the formatted date
return render(request, 'pages/index.html', {
'date': formatedDate
})
В шаблоне
Если вы хотите отформатировать строку в шаблоне, а не в представлении (контроллере), вы можете сделать это с помощью фильтра, а именно даты. Следующее представление (контроллер) возвращает объект даты в простой шаблон, который будет печатать дату, отправленную из представления:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
# Import Datetime class
from datetime import datetime
def index(request):
# Some Date Object, for example a default generated by datetime
myDate = datetime.now()
# Render Some Template with a parameter accesible as date
return render(request, 'pages/index.html', {
'date': myDate
})
Содержание следующего шаблона (index.html
) будет использовать следующий код для форматирования предоставленного объекта даты:
Prints something like: Aug. 27, 2017, 2:57 p.m.
{{ date|date:'Y-m-d H:i' }}