5 приемов при работе с модулем datetime в Python
Сегодня посмотрим на Python-библиотеку datetime - незаменимый набор инструментов для обработки данных с датой и временем. Я дам обзор пяти основных приемов этой библиотеки, которые закроют большинство ваших проблем при обработки дат и времени. Поехали!
Понимание что такое объект datetime в Python.
Прежде чем приступить к разбору самих приемов полезно посмотреть, как устроены дата и время в datetime. Основным строительным блоком является объект datetime. И вполне логично, что это комбинация объекта даты и объекта времени (привет, кэп Очевидность!) Объект даты - это просто набор значений года, месяца, дня плюс набор функций, которые умеют их обрабатывать. Аналогичным образом устроен объект времени. Он включает значения часа, минут, секунд, микросекунд и часового пояса. Любое время может быть представлено соответствующим выбором этих значений.
1. combine()
import datetime
# (часы, минуты)
start_time = datetime.time(20, 0)
# (год, месяц, день)
# Создаем объект datetimet
start_datetime = datetime.datetime.combine(start_date, start_time)
Создать объект datetime просто. Мы используем функцию comb () и передаем ей объект date и объект time, из которых мы хотим построить наше datetime.
Из-за похода к неймингу вызов функций пакета datetime могут сбивать с толку. Во-первых, datetime - это имя самой библиотеки(или еще называют пакета). Во-вторых datetime - это также имя модуля внутри пакета и, в-третьих, datetime - это уже тип самого объекта. Поэтому, когда мы объединяем нашу дату и время, мы вызываем его с таким задвоенным префиксом datetime.datetime. Первое datetime ссылается на пакет, второе datetime ссылается на модуль, а comb () - это функция внутри этого модуля.
2. timedelta
# Разница между datetimes -это объекты типа timedelta
timedelta_total = end_datetime - start_datetime
# timedelta состоят из дней, секунд и микросекунд
end_datetime = start_datetime + timedelta_total
Объекты c типом timedelta невероятно полезны, потому что они позволяют нам выполнять простую арифметику сложения и вычитания с датами. Они избавляют нас от необходимости думать о таких вещах, как количество дней в месяце, сколько секунд в дне или в високосном годе.
3. Timestamps
# Число секунд с 12:00 час. 1-го Января 1970, UTC
unix_time = timestamp(start_datetime)
start_datetime = fromtimestamp(1457453760)
4. weekday () и isoweekday ()
# Выводит порядковый номер дня недели
# Понедельник - 0, Воскресенье - 6
weekday_number = start_datetime.date().weekday()
5. Преобразование в строчный формат
# Переводит строку в объект datetime
new_datetime = datetime.datetime.strptime(
'2020-07-31', '%Y-%m-%d')
# И обратно - из datetime в строку
datestr = new_datetime.strftime('%Y-%m-%d')
print(datestr)
>> "2020-07-31"
Для этого мы будем использовать функции strptime () и strftime (). При преобразовании в любом направлении мы должны предоставить некий шаблон, определяющий формат конечного результата. В фрагменте кода выше «% Y» представляет год, «% m» - месяц из двух цифр, а «% d» - день из двух цифр. Вот еще список значений для шаблона:
%A - полное название дня недели(Понедельник, Вторник)
%B - полное название месяца (Январь, Февраль)
%H - часы в 24-х часовом формате
%y - последний две цифры года(18, 19, 20)
Полный список кодов форматирования можно найти по этой ссылке
Кстати, на самом деле существует один правильный способ представления лет, месяцев и дней в датах: «ГГГГ-ММ-ДД». (Международный стандарт ISO 8601 установил это в 1988 г.) В этом формате, например, 31 июля 2020 г. будет «2020-07-31». Поэтому, ни российский вариант “31.07.2020”, ни американский вариант “07.31.2020” не являются верными с точки зрения соблюдения стандартов. Я рекомендую всякий раз, когда вам предоставляется выбор, форматировать даты именно в международном стандарте. Так вы сможете избежать некоторых проблем. связанных с совместимостью вашего кода.
Заключение
Итак, теперь вы вооружены пятью полезными приемами при работе с датами и временем:- combine()
- timedelta
- Преобразование в timestamp
- weekday()/isoweekday()
- Строчное форматирование
Комментарии
Отправить комментарий