Вступление
Python поставляется с множеством полезных объектов, которые можно использовать прямо из коробки. Объекты даты являются примерами таких объектов. Типами дат трудно управлять с нуля из-за сложности дат и времени. Однако объекты даты Python позволяют чрезвычайно легко преобразовывать даты в желаемые строковые форматы.
Форматирование даты - одна из важнейших задач, с которой вы столкнетесь как программист. В разных регионах мира используются разные способы представления даты / времени, поэтому ваша цель как программиста - представить значения даты в удобном для чтения виде.
Например, вам может потребоваться представить значение даты в числовом формате, например «02-23-2018». С другой стороны, вам может потребоваться записать то же значение даты в более длинном текстовом формате, например «23 февраля 2018 г.». В другом сценарии вы можете извлечь месяц в строковом формате из числового значения даты.
В этой статье мы изучим различные типы объектов даты, а также их функции.
Модуль datetime
Модуль Python datetime
, как вы, наверное, догадались, содержит
методы, которые можно использовать для работы со значениями даты и
времени. Чтобы использовать этот модуль, мы сначала импортируем его с
помощью import
следующим образом:
import datetime
Мы можем представить значения времени с помощью класса time
Атрибуты
для time
включают час, минуту, секунду и микросекунду.
Аргументы для time
необязательны. Хотя, если вы не укажете аргумент,
вы вернетесь к времени 0, что вряд ли будет тем, что вам нужно большую
часть времени.
Например, чтобы инициализировать объект времени со значением 1 час, 10 минут, 20 секунд и 13 микросекунд, мы можем выполнить следующую команду:
t = datetime.time(1, 10, 20, 13)
Чтобы посмотреть время, воспользуемся функцией print
print(t)
Выход:
01:10:20.000013
Возможно, вам понадобится увидеть только час, минуту, секунду или микросекунду, вот как вы можете это сделать:
print('hour:', t.hour)
Выход:
hour: 1
Минуты, секунды и микросекунды для указанного выше времени можно получить следующим образом:
print('Minutes:', t.minute)
print('Seconds:', t.second)
print('Microsecond:', t.microsecond)
Выход:
Minutes: 10
Seconds: 20
Microseconds: 13
Значения календарной даты могут быть представлены через класс date
У
экземпляров будут атрибуты года, месяца и дня.
Давайте вызовем today
чтобы увидеть сегодняшнюю дату:
import datetime
today = datetime.date.today()
print(today)
Выход:
2018-09-15
Код вернет дату на сегодня, поэтому вывод, который вы увидите, будет зависеть от дня, когда вы запускаете вышеуказанный скрипт.
Теперь ctime
чтобы распечатать дату в другом формате:
print('ctime:', today.ctime())
Выход:
ctime: Sat Sep 15 00:00:00 2018
Метод ctime
использует более длинный формат даты и времени, чем в
примерах, которые мы видели ранее. Этот метод в основном используется
для преобразования времени Unix (количество секунд с 1 января 1970 г.) в
строковый формат.
А вот как мы можем отобразить год, месяц и день, используя класс date
print('Year:', today.year)
print('Month:', today.month)
print('Day :', today.day)
Выход
Year: 2018
Month: 9
Day : 15
Преобразование дат в строки с помощью strftime
Теперь, когда вы знаете, как создавать объекты даты и времени, давайте научимся форматировать их в более удобочитаемые строки.
Для этого мы будем использовать метод strftime
Этот метод помогает нам
преобразовывать объекты даты в читаемые строки. Он принимает два
параметра, как показано в следующем синтаксисе:
time.strftime(format, t)
Первый параметр - это строка формата, а второй параметр - время форматирования, что не является обязательным.
Этот метод также можно использовать datetime
, как показано в
следующем примере:
import datetime
x = datetime.datetime(2018, 9, 15)
print(x.strftime("%b %d %Y %H:%M:%S"))
Выход:
Sep 15 2018 00:00:00
Для форматирования даты мы использовали следующие символьные строки:
%b
: возвращает первые три символа названия месяца. В нашем примере он вернул «сен».%d
: возвращает день месяца от 1 до 31. В нашем примере он вернул «15».%Y
: возвращает год в четырехзначном формате. В нашем примере он вернул «2018».%H
: возвращает час. В нашем примере он вернул «00».%M
: возвращает минуты от 00 до 59. В нашем примере возвращается «00».%S
: возвращает вторую, от 00 до 59. В нашем примере она вернула «00».
Мы не пропустили время, поэтому все значения времени равны «00». В следующем примере показано, как можно форматировать время:
import datetime
x = datetime.datetime(2018, 9, 15, 12, 45, 35)
print(x.strftime("%b %d %Y %H:%M:%S"))
Выход:
Sep 15 2018 12:45:35
Полный список кодов символов
Помимо символьных строк, приведенных выше, strftime
принимает
несколько других директив для форматирования значений даты:
%a
: возвращает первые три символа дня недели, например среда.%A
: возвращает полное название дня недели, например среда.%B
: возвращает полное название месяца, например, сентябрь.%w
: возвращает день недели в виде числа от 0 до 6, при этом воскресенье - 0.%m
: возвращает месяц в виде числа от 01 до 12.%p
: возвращает AM / PM для времени.%y
: возвращает год в двузначном формате, то есть без века. Например, «18» вместо «2018».%f
: возвращает микросекунду от 000000 до 999999.%Z
: возвращает часовой пояс.%z
: возвращает смещение по всемирному координированному времени.%j
: возвращает номер дня в году от 001 до 366.%W
: возвращает номер недели в году от 00 до 53, при этом понедельник считается первым днем недели.%U
: возвращает номер недели в году от 00 до 53, при этом воскресенье считается первым днем каждой недели.%c
: возвращает местную версию даты и времени.%x
: возвращает локальную версию даты.%X
: возвращает локальную версию времени.
Рассмотрим следующий пример:
import datetime
x = datetime.datetime(2018, 9, 15)
print(x.strftime('%b/%d/%Y'))
Выход:
Sep/15/2018
А вот как получить только месяц:
print(x.strftime('%B'))
Выход:
September
Покажем год:
print(x.strftime('%Y'))
Выход:
2018
В этом примере мы использовали код формата %Y
Обратите внимание, что
Y
находится в верхнем регистре. Теперь напишите это в нижнем регистре:
print(x.strftime('%y'))
Выход:
18
На этот раз век опущен. Как видите, с помощью этих кодов форматирования вы можете представлять дату и время практически в любой форме.
Преобразование строк в даты с помощью strptime
Метод strftime
помог нам преобразовать объекты даты в более читаемые
строки. Метод strptime
делает противоположное, то есть принимает
строки и преобразует их в объекты даты, понятные Python.
Вот синтаксис метода:
datetime.strptime(string, format)
string
параметр - это значение в строковом формате, которое мы хотим
преобразовать в формат даты. Параметр format
- это директива,
определяющая формат, который должен быть принят датой после
преобразования.
Например, предположим, что нам нужно преобразовать строку «15.09.18» в
объект datetime
Сначала импортируем модуль datetime
Мы будем использовать from
,
чтобы иметь возможность ссылаться на определенные функции модуля без
формата точки:
from datetime import datetime
Затем мы можем определить дату в виде строки:
str = '9/15/18'
Python не сможет понять указанную выше строку как datetime, пока мы не
преобразуем ее в фактический объект datetime
Мы можем успешно сделать
это, вызвав метод strptime
Выполните следующую команду, чтобы преобразовать строку:
date_object = datetime.strptime(str, '%m/%d/%y')
Теперь вызовем print
чтобы отобразить строку в формате datetime
print(date_object)
Выход:
2018-09-15 00:00:00
Как видите, конвертация прошла успешно!
Вы можете видеть, что косая черта «/» использовалась для разделения
различных элементов строки. Это сообщает strptime
каком формате
находится наша дата, в нашем случае "/" используется в качестве
разделителя.
Но что, если день / месяц / год были разделены знаком «-»? Вот как вы с этим справитесь:
from datetime import datetime
str = '9-15-18'
date_object = datetime.strptime(str, '%m-%d-%y')
print(date_object)
Выход:
2018-09-15 00:00:00
И снова, благодаря спецификатору strptime
метод strptime смог
проанализировать нашу дату и преобразовать ее в объект даты.
Заключение
В этой статье мы изучили, как форматировать даты в Python. Мы увидели,
как datetime
в Python может использоваться для управления значениями
даты и времени. Модуль содержит ряд классов, которые можно использовать
для этой цели. Например, time
используется для представления значений
времени, а date
- для представления значений календарной даты.