Part 7

Время и даты

Объект 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

Loading
Loading

Форматирование времени и дат

Модуль 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

Loading
Вы дошли до конца этого раздела! Перейти к следующему разделу:

Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.