Рубрики
Без рубрики

Как форматировать даты в Python

Автор оригинала: Nicholas Samuel.

Как форматировать даты в Python

Вступление

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

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

Например, вам может потребоваться представить значение даты численно, например “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

Код вернет дату на сегодня, поэтому вывод, который вы увидите, будет зависеть от дня, в который вы запустите приведенный выше скрипт.

Теперь давайте вызовем метод crime для печати даты в другом формате:

print('ctime:', today.ctime())

Выход:

ctime: Sat Sep 15 00:00:00 2018

Метод time использует более длинный формат даты и времени, чем примеры, которые мы видели ранее. Этот метод в основном используется для преобразования 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 : Возвращает первые три символа дня недели, например Wed.
  • %A : Возвращает полное имя дня недели, например среды.
  • %B : Возвращает полное название месяца, например сентябрь.
  • %w : Возвращает день недели в виде числа от 0 до 6, а воскресенье равно 0.
  • %m : Возвращает месяц в виде числа, от 01 до 12.
  • %p : Возвращает AM/PM для времени.
  • %y : Возвращает год в двухзначном формате, то есть без века. Например, “18” вместо “2018”.
  • %f : Возвращает микросекунду от 000000 до 999999.
  • %Z : Возвращает часовой пояс.
  • %z : Возвращает смещение UTC.
  • %j : Возвращает номер дня в году, от 001 до 366.
  • %W : Возвращает номер недели года, от 00 до 53, причем понедельник считается первым днем недели.
  • %U : Возвращает номер недели года, от 00 до 53, причем воскресенье считается первым днем каждой недели.
  • %c : Возвращает локальную версию даты и времени.
  • %x : Возвращает локальную версию date.
  • %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 помог нам преобразовать объекты date в более читаемые строки. Метод strptime делает обратное, то есть он берет строки и преобразует их в объекты даты, которые Python может понять.

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

datetime.strptime(string, format)

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

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

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

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 смог разобрать наши данные и преобразовать их в объект данных.

Вывод

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