Форматирование даты в Python

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

Форматирование даты в Python – одна из важнейших задач, с которой вы столкнетесь как программист. В разных регионах мира есть разные способы представления даты и времени, поэтому ваша цель как программиста – представить значения даты в удобном для чтения виде.

Например, вам может потребоваться представить значение даты в числовом формате, например «02-23-2018». С другой стороны, вам может потребоваться записать то же значение даты в более длинном текстовом формате, например «23 февраля 2018 г.». В другом сценарии вы можете извлечь месяц в строковом формате из числового значения даты.

В этой статье мы изучим различные типы объектов даты, а также их функции.

Модуль datetime

Модуль datetime в Python, как вы, наверное, догадались, содержит методы, которые можно использовать для работы со значениями даты и времени. Чтобы использовать этот модуль, мы сначала импортируем его с помощью оператора импорта следующим образом:

import datetime

Мы можем представить значения времени с помощью класса 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: возвращает первые три символа названия месяца. В нашем примере он вернул «Sep».
  • % 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

На этот раз век опущен. Как видите, с помощью этих кодов форматирования вы можете представлять дату и время практически в любой форме.

Преобразование строк в даты

Метод strftime помог нам преобразовать объекты даты в более читаемые строки. Метод делает противоположное, то есть принимает строки и преобразует их в объекты даты, понятные Python.

Вот синтаксис метода:

datetime.strptime(string, format)

Строковый параметр – это значение в строковом формате, которое мы хотим преобразовать в формат даты. Параметр формата – это директива, определяющая формат, который должен быть принят датой после преобразования.

Например, предположим, что нам нужно преобразовать строку «9/15/18» в объект datetime.

Сначала импортируем модуль datetime. Мы будем использовать ключевое слово from, чтобы иметь возможность ссылаться на определенные функции модуля без формата точки:

from datetime import datetime

Затем мы можем определить дату в виде строки:

str = '9/15/18'

Python не сможет понять указанную выше строку как datetime, пока мы не преобразуем ее в фактический объект datetime. Мы можем успешно сделать это, вызвав метод strptime.

Выполните следующую команду, чтобы преобразовать строку:

date_object = datetime.strptime(str, '%m/%d/%y')

Теперь вызовем функцию печати, чтобы отобразить строку в формате 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 смог проанализировать нашу дату и преобразовать ее в объект даты.

Заключение

В этой статье мы изучили, как форматировать даты в Python. Мы увидели, как модуль datetime в Python может использоваться для управления значениями даты и времени. Модуль содержит ряд классов, которые можно использовать для этой цели. Например, класс времени используется для представления значений времени, а класс даты – для представления значений календарной даты.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *