- Метод strptime() и strftime() в Python
- Пример 1: Строка для объекта datetime
- Как работает strptime()?
- Пример 2: Строка для объекта datetime
- Список кодов форматов
- ValueError
- Преобразование даты и времени в строку
- Как работает strftime() ?
- Создание строки из отметки времени
- Пример 3
- Форматирование даты и времени в Python
- Описание формата strftime
- Использование strftime
- Преобразование даты в strftime
- Отображение миллисекунд
- Описание формата strptime
- Использование метода strptime
- Заключение
Метод strptime() и strftime() в Python
В этой статье вы научитесь создавать объект datetime из строки (с помощью примеров).
Метод strptime() создает объект datetime из заданной строки.
Примечание: Вы не можете создать объект datetime из каждой строки. Строка должна быть в определенном формате.
Пример 1: Строка для объекта datetime
from datetime import datetime date_string = «21 June, 2018» print(«date_string =», date_string) print(«type of date_string =», type(date_string)) date_object = datetime.strptime(date_string, «%d %B, %Y») print(«date_object =», date_object) print(«type of date_object EnlighterJSRAW» data-enlighter-language=»python»>date_string = 21 June, 2018 type of date_string = date_object = 2018-06-21 00:00:00 type of date_object =
Как работает strptime()?
Метод strptime() в Python принимает два аргумента:
На основе используемой строки и кода формата метод возвращает эквивалентный объект datetime.
В приведенном выше примере:
- % d ‒ представляет день месяца. Пример: 01, 02, …, 31;
- % B ‒ полное название месяца. Пример: январь, февраль и т.д.;
- % Y ‒ год в четырехзначном формате. Пример: 2018, 2019 и т.д.
Пример 2: Строка для объекта datetime
from datetime import datetime dt_string = "12/11/2018 09:15:32" # Considering date is in dd/mm/yyyy format dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S") print("dt_object1 =", dt_object1) # Considering date is in mm/dd/yyyy format dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S") print("dt_object2 EnlighterJSRAW" data-enlighter-language="python">dt_object1 = 2018-11-12 09:15:32 dt_object2 = 2018-12-11 09:15:32
Список кодов форматов
В таблице ниже показаны все коды формата, которые вы можете использовать:
Директива | Значение | Пример |
% a | Сокращенное название дня недели. | Вс, пн, … |
% А | Полное название дня недели. | Воскресенье понедельник, … |
%w | День недели в виде десятичного числа. | 0, 1, …, 6 |
% d | День месяца в виде десятичной дроби с нулями. | 01, 02, …, 31 |
% -d | День месяца в виде десятичного числа. | 1, 2, …, 30 |
% b | Сокращенное название месяца. | Янв, Фев, …, Дек |
% B | Полное название месяца. | Январь Февраль, … |
% m | Месяц как десятичное число с нулями. | 01, 02, …, 12 |
% -m | Месяц как десятичное число. | 1, 2, …, 12 |
% y | Год без века как десятичное число с нулями. | 00, 01, …, 99 |
% -y | Год без столетия как десятичное число. | 0, 1, …, 99 |
% Y | Год со столетием в виде десятичного числа. | 2013, 2019 и т. Д. |
%H | Час (в 24-часовом формате) как десятичное число с нулями. | 00, 01, …, 23 |
%-H | Час (24-часовой формат) как десятичное число. | 0, 1, …, 23 |
%I | Час (12-часовой формат) как десятичное число с нулями. | 01, 02, …, 12 |
%-I | Час (12-часовой формат) в виде десятичного числа. | 1, 2, … 12 |
%p | Локализация AM или PM. | до полудня, после полудня |
% M | Минута в виде десятичного числа с нулями. | 00, 01, …, 59 |
% -M | Минута как десятичное число. | 0, 1, …, 59 |
% S | Второй — десятичное число с нулями. | 00, 01, …, 59 |
% -S | Секунда как десятичное число. | 0, 1, …, 59 |
% f | Микросекунда в виде десятичного числа с нулями слева. | 000000–999999 |
%z | Смещение UTC в форме + ЧЧММ или -ЧЧММ. | |
%Z | Название часового пояса. | |
% j | День года в виде десятичного числа с нулями. | 001, 002, …, 366 |
% -j | День года в виде десятичного числа. | 1, 2, …, 366 |
% U | Номер недели в году (воскресенье как первый день недели). Все дни нового года, предшествующие первому воскресенью, считаются нулевой неделей. | 00, 01, …, 53 |
%W | Номер недели в году (понедельник как первый день недели). Все дни нового года, предшествующие первому понедельнику, считаются нулевой неделей. | 00, 01, …, 53 |
% c | Соответствующее представление даты и времени языкового стандарта. | 30 сен, пн, 07:06:05 2013 |
%x | Соответствующее представление даты языкового стандарта. | 30.09.13 |
%X | Соответствующее представление времени локали. | 07:06:05 |
%% | Буквальный символ «%». | % |
ValueError
Если строка (первый аргумент) и код формата (второй аргумент), не совпадают, вы получите ValueError. Например:
from datetime import datetime date_string = "12/11/2018" date_object = datetime.strptime(date_string, "%d %m %Y") print("date_object EnlighterJSRAW" data-enlighter-language="python">ValueError: time data '12/11/2018' does not match format '%d %m %Y'
В этой статье вы научитесь преобразовывать объекты даты, времени и даты и времени в эквивалентную строку (с помощью примеров).
Метод strftime() возвращает строку, представляющую дату и время, используя объект date, time или datetime.
Преобразование даты и времени в строку
Приведенная ниже программа преобразует объект, содержащий текущую дату и время, в различные строковые форматы.
from datetime import datetime now = datetime.now() # current date and time year = now.strftime("%Y") print("year:", year) month = now.strftime("%m") print("month:", month) day = now.strftime("%d") print("day:", day) time = now.strftime("%H:%M:%S") print("time:", time) date_time = now.strftime("%m/%d/%Y, %H:%M:%S") print("date and time:",date_time)
Когда вы запустите программу, результат будет примерно таким:
year: 2018 month: 12 day: 24 time: 04:59:31 date and time: 12/24/2018, 04:59:31
Здесь год, день, время и date_time ‒ это строки, а now ‒ объект datetime.
Как работает strftime() ?
В приведенной выше программе % Y,% m,% d и т.д. являются кодами формата. Метод strftime() принимает один или несколько кодов формата в качестве аргумента и возвращает отформатированную строку на его основе.
- Мы импортировали класс datetime из модуля datetime. Это потому, что объект класса datetime может получить доступ к методу strftime().
- Объект datetime, содержащий текущую дату и время, сохраняется в переменной now .
- Метод можно использовать для создания форматированных строк.
- Строка, которую вы передаете методу strftime(), может содержать более одного кода формата.
Создание строки из отметки времени
from datetime import datetime timestamp = 1528797322 date_time = datetime.fromtimestamp(timestamp) print("Date time object:", date_time) d = date_time.strftime("%m/%d/%Y, %H:%M:%S") print("Output 2:", d) d = date_time.strftime("%d %b, %Y") print("Output 3:", d) d = date_time.strftime("%d %B, %Y") print("Output 4:", d) d = date_time.strftime("%I%p") print("Output 5:", d)
Когда вы запустите программу, вывод будет:
Date time object: 2018-06-12 09:55:22 Output 2: 06/12/2018, 09:55:22 Output 3: 12 Jun, 2018 Output 4: 12 June, 2018 Output 5: 09AM
Пример 3
from datetime import datetime timestamp = 1528797322 date_time = datetime.fromtimestamp(timestamp) d = date_time.strftime("%c") print("Output 1:", d) d = date_time.strftime("%x") print("Output 2:", d) d = date_time.strftime("%X") print("Output 3:", d)
Когда вы запустите программу, вывод будет:
Output 1: Tue Jun 12 09:55:22 2018 Output 2: 06/12/18 Output 3: 09:55:22
Коды формата % c,% x и % X используются для соответствующего языкового стандарта представления даты и времени.
Форматирование даты и времени в Python
Сегодня рассмотрим два метода strftime и strptime из стандартной библиотеки datetime в языке программирования Python.
Описание формата strftime
Кратко говоря, strftime преобразует объект date в строковую дату.
Это выглядит так: dateobject.strftime(format).
«Format» — это желаемый формат строки даты, который хочет получить пользователь. Формат строится с использованием кодов, приведенных ниже:
- %a — будний день сокращенно (Пн, Вт,…)
- %A — будний день полностью (Понедельник, Вторник,…)
- %w — будний день, как десятичное число (1, 2, 3,…)
- %d — день месяца в числах (01, 02, 03,…)
- %b — месяцы сокращенно (Янв, Фев,…)
- %B — название месяцев полностью (Январь, Февраль,…)
- %m — месяцы в числах (01, 02, 03,…)
- %y — года без века (19, 20, 21)
- %Y — года с веком (2019, 2020, 2021)
- %H — 24 часа в сутки (с 00 до 23)
- %I — 12 часов в сутки (с 01 до 12)
- %p — AM и PM (00-12 и 12-00)
- %M — минуты (от 00 до 59)
- %S — секунды (от 00 до 59)
- %f — миллисекунды (6 десятичных чисел)
Использование strftime
Давайте рассмотрим конкретный пример — преобразование текущего времени в строку даты:
import datetime from datetime import datetime now = datetime.now() print(now)
Давайте теперь преобразуем приведенный выше объект datetime в строку datetime:
Если вы хотите напечатать месяц в качестве сокращенного названия, замените %m на %b, как показано ниже:
Преобразование даты в strftime
Преобразование даты в строку очень похоже на преобразование datetime в строку.
Рассмотрим пример — преобразование текущего объекта даты в строку даты:
today = datetime.today() print(today)
Давайте преобразуем приведенный выше объект date в строку даты с помощью метода strftime:
Отображение миллисекунд
Чтобы получить строку даты с миллисекундами, используйте код формата %f в конце, как показано ниже:
today = datetime.today() today.strftime("%Y-%m-%d %H:%M:%S.%f")
Описание формата strptime
Strptime используется для преобразования строки в объект datetime. Тоесть обратное действие методу strftime. Это выглядит так: strptime(date_string, format).
Разберем пример: strptime(«9/23/20», «%d/%m/%y»). Формат «%d/%m/%y» представляет собой соответствующий формат «9/23/20». Результатом приведенной выше команды будет объект datetime.
Формат строится с использованием заранее определенных кодов. Есть много кодов на выбор. Наиболее важные из них были перечислены ранее (смотрите 1 пункт в содержании).
Использование метода strptime
Преобразуем строку даты в объект datetime:
import datetime datetime.datetime.strptime("09/23/2030 8:28","%m/%d/%Y %H:%M")
datetime.datetime(2030, 9, 23, 8, 28)
Заключение
На этом всё. Желаю удачи в программировании!
Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.
Ссылка на мой github есть в шапке. Залетай.
Здравствуйте, Егор!
Статья замечательная, спасибо за неё!
Пытаюсь научиться программировать, невзирая на свой зрелый возраст.
Предполагаю, что метод «strptime» должен понадобиться мне для решения ближайших намеченных задач преобразования частей строк вида «31 декабря 2010» в объекты datetime — («%d/%m/%Y»).
Наверное «декабря» и прочие неправильные или лишние буквы в названиях месяцев, тоже придётся обрабатывать до вида «декабрь»? Будет видно по мере реализации задачи.
С преобразованием времени (часы, минуты) вроде должно быть проще.
Надеюсь в Python 3.8 всё это будет работать.
Здравствуйте, Борис.
Я бы советовал вам, произвести небольшое сопоставление строчного именования месяца в численное.
Например: «Январь», «Января» — 01,
«Февраль», «Февраля» — 02,
«Март», «Марта» — 03. Для того, чтобы легче было преобразовать дату в формат datetime.