На этом шаге мы рассмотрим способы решения этой задачи.
Ваше приложение получает данные о времени в строковом формате, но вы хотите конвертировать их в объекты datetime, чтобы выполнять над ними нестроковые операции.
Стандартный модуль datetime обычно легко справляется с этой задачей. Например:
>>> from datetime import datetime >>> text = '2012-09-20' >>> y = datetime.strptime(text, '%Y-%m-%d') >>> z = datetime.now() >>> diff = z - y >>> diff datetime.timedelta(days=4943, seconds=44129, microseconds=205062) >>>
Метод datetime.strptime() поддерживает множество параметров форматирования, таких как %Y для года из четырех цифр и %m для месяца из двух цифр. Также стоит отметить, что эти параметры-заглушки работают в обратном направлении, что поможет, если вам нужно вывести объект datetime в строке и при этом заставить его красиво выглядеть.
Предположим, что ваша программа генерирует объект datetime, но вам нужно создать из него красивую, понятную людям дату, чтобы потом вставить ее в заголовок автоматически создаваемого письма или отчета:
>>> z datetime.datetime(2026, 4, 3, 12, 15, 29, 205062) >>> nice_z = datetime.strftime(z, '%A %B %d, %Y') >>> nice_z 'Friday April 03, 2026' >>>
Стоит отметить, что производительность метода strptime() часто оказывается намного хуже, чем вы могли бы ожидать, поскольку функция написана на чистом Python и должна работать со всеми установками системной локализации. Если вы парсите множество дат в своей программе и знаете их точный формат, то можете добиться намного более высокой производительности путем написания собственного решения. Например, если вы знаете, что даты представлены в формате "YYYY-MM-DD", то можете написать такую функцию:
>>> from datetime import datetime >>> def parse_ymd(s): year_s, mon_s, day_s = s.split('-') return datetime(int(year_s), int(mon_s), int(day_s)) >>>
При тестировании эта функции оказалась более чем в 7 раз быстрее метода datetime.strptime(). Это стоит держать в голове, если вы обрабатываете большие объемы данных с датами.
На следующем шаге мы рассмотрим манипулирование датами с учетом временных зон.