Время и даты
Объект datetime
Модуль Python datetime включает функцию now, которая возвращает объект datetime, содержащий текущие дату и время. Стандартный вывод объекта datetime выглядит так:
from datetime import datetime
my_time = datetime.now()
print(my_time)2021-10-19 08:46:49.311393
Объект также можно задать самостоятельно:
from datetime import datetime
my_time = datetime(1952, 12, 24)
print(my_time)1952-12-24 00:00:00
По умолчанию время устанавливается на полночь, поскольку в примере выше мы не указали время суток.
К разным элементам объекта datetime можно обращаться следующим образом:
from datetime import datetime
my_time = datetime(1952, 12, 24)
print("Day:", my_time.day)
print("Month:", my_time.month)
print("Year:", my_time.year)Day: 24 Month: 12 Year: 1952
Время суток тоже можно указать. Точность может различаться, как видно ниже:
from datetime import datetime
pv1 = datetime(2021, 6, 30, 13) # 30.6.2021 at 1PM
pv2 = datetime(2021, 6, 30, 18, 45) # 30.6.2021 at 6.45PMСравнение времени и вычисление разницы
Знакомые операторы сравнения работают и с объектами datetime:
from datetime import datetime
time_now = datetime.now()
midsummer = datetime(2021, 6, 26)
if time_now < midsummer:
print("It is not yet Midsummer")
elif time_now == midsummer:
print("Happy Midsummer!")
elif time_now > midsummer:
print("It is past Midsummer")It is past Midsummer
Разницу между двумя объектами datetime можно вычислить просто с помощью оператора вычитания:
from datetime import datetime
time_now = datetime.now()
midsummer = datetime(2021, 6, 26)
difference = midsummer - time_now
print("Midsummer is", difference.days, "days away")Midsummer is -116 days away
Обратите внимание: результат вычитания datetime — это объект timedelta. Он менее универсален, чем объект datetime. Например, в объекте timedelta можно получить количество дней, но не количество лет, поскольку длина года различается. Объект timedelta содержит атрибуты days, seconds и microseconds. Другие меры можно передавать как аргументы, но они будут преобразованы внутри.
Аналогично, сложение доступно между объектами datetime и timedelta. Результатом будет datetime, полученный после добавления указанного количества дней (или недель, секунд и т. д.) к объекту datetime:
from datetime import datetime, timedelta
midsummer = datetime(2021, 6, 26)
one_week = timedelta(days=7)
week_from_date = midsummer + one_week
print("A week after Midsummer it will be", week_from_date)
long_time = timedelta(weeks=32, days=15)
print("32 weeks and 15 days after Midsummer it will be", midsummer + long_time)A week after Midsummer it will be 2021-07-03 00:00:00 32 weeks and 15 days after Midsummer it will be 2022-02-20 00:00:00
Посмотрим, как работает более высокая точность:
time_now = datetime.now()
midnight = datetime(2021, 6, 30)
difference = midnight - time_now
print(f"Midnight is still {difference.seconds} seconds away")Midnight is still 8188 seconds away
Форматирование времени и дат
Модуль datetime содержит удобный метод strftime для форматирования строкового представления объекта datetime. Например, следующий код выведет текущую дату в формате dd.mm.yyyy, а затем дату и время в другом формате:
from datetime import datetime
my_time = datetime.now()
print(my_time.strftime("%d.%m.%Y"))
print(my_time.strftime("%d/%m/%Y %H:%M"))19.10.2021 19/10/2021 09:31
Форматирование времени использует специальные символы для обозначения конкретных форматов. Ниже список некоторых из них (полный список см. в документации Python):
| Обозначение | Значение |
|---|---|
%d | день (01–31) |
%m | месяц (01–12) |
%Y | год в 4-значном формате |
%H | часы в 24-часовом формате |
%M | минуты (00–59) |
%S | секунды (00–59) |
Также можно указать разделитель между разными элементами, как показано в примерах выше.
Форматирование datetime работает и в обратном направлении, если нужно разобрать объект datetime из строки, которую дал пользователь. Метод strptime делает именно это:
from datetime import datetime
birthday = input("Please type in your birthday in the format dd.mm.yyyy: ")
my_time = datetime.strptime(birthday, "%d.%m.%Y")
if my_time < datetime(2000, 1, 1):
print("You were born in the previous millennium")
else:
print("You were born during this millennium")Please type in your birthday in the format dd.mm.yyyy: 5.11.1986 You were born in the previous millennium
Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.