JavaRush /Курсы /Модуль 1: Python Core /Библиотека datetime

Библиотека datetime

Модуль 1: Python Core
8 уровень , 8 лекция
Открыта

9.1 Работа с датой и временем

Программистам очень часто приходится в своих программах работать с датами и временем. Поэтому нет ничего удивительного в том, что в Python на эти случаи есть две стандартные библиотеки datetime и time.

Библиотека datetime является частью стандартной библиотеки Python и предоставляет классы для работы с датами и временем. Она позволяет создавать, манипулировать и форматировать даты и время, а также выполнять арифметические операции с ними.

Основные классы библиотеки datetime

Класс datetime.date

Этот класс представляет дату (год, месяц, день) без времени. Он полезен для работы с календарными датами.

Пример использования:


import datetime

# Создание объекта даты
d = datetime.date(2023, 5, 24)
print(d)  # Вывод: 2023-05-24
            
# Получение текущей даты
today = datetime.date.today()
print(today)
            
# Доступ к атрибутам года, месяца и дня
print(d.year)  # Вывод: 2023
print(d.month)  # Вывод: 5
print(d.day)  # Вывод: 24

Класс datetime.time

Этот класс представляет время (часы, минуты, секунды, микросекунды) без даты. Он полезен для работы с временем суток.

Пример использования:


import datetime

# Создание объекта времени
t = datetime.time(14, 30, 45)
print(t)  # Вывод: 14:30:45
            
# Доступ к атрибутам часов, минут и секунд
print(t.hour)  # Вывод: 14
print(t.minute)  # Вывод: 30
print(t.second)  # Вывод: 45

Класс datetime.datetime

Этот класс объединяет дату и время (год, месяц, день, часы, минуты, секунды, микросекунды). Он полезен для работы с конкретными моментами времени.

Пример использования:


import datetime

# Создание объекта даты и времени
dt = datetime.datetime(2023, 5, 24, 14, 30, 45)
print(dt)  # Вывод: 2023-05-24 14:30:45
        
# Получение текущей даты и времени
now = datetime.datetime.now()
print(now)
        
# Доступ к атрибутам даты и времени
print(dt.year)  # Вывод: 2023
print(dt.month)  # Вывод: 5
print(dt.day)  # Вывод: 24
print(dt.hour)  # Вывод: 14
print(dt.minute)  # Вывод: 30
print(dt.second)  # Вывод: 45

Класс datetime.timedelta

Этот класс представляет разницу между двумя моментами времени, выраженную в днях, секундах и микросекундах. Он полезен для выполнения арифметических операций с датами и временем.

Пример использования:


import datetime

# Создание объекта timedelta
delta = datetime.timedelta(days=10, hours=5, minutes=30)
print(delta)  # Вывод: 10 days, 5:30:00
        
# Добавление timedelta к дате
dt = datetime.datetime(2023, 5, 24, 14, 30)
new_dt = dt + delta
print(new_dt)  # Вывод: 2023-06-03 20:00:00
        
# Вычитание timedelta из даты
earlier_dt = dt - delta
print(earlier_dt)  # Вывод: 2023-05-14 09:00:00

9.2 Форматирование и парсинг дат и времени

Нам часто нужно не просто работать с датой, а преобразовывать её в строку определённого вида. Обратный процесс, когда мы преобразуем строку в объект, обычно называется парсингом. Для этих операций в Python тоже есть свои классы и методы:

Метод strftime()

Метод strftime() используется для форматирования объектов datetime в строку по заданному формату.

Пример использования:


import datetime

dt = datetime.datetime(2023, 5, 24, 14, 30, 45)
    
# Форматирование даты и времени
formatted_dt = dt.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_dt)  # Вывод: 2023-05-24 14:30:45
    
# Форматирование только даты
formatted_date = dt.strftime("%d-%m-%Y")
print(formatted_date)  # Вывод: 24-05-2023
    
# Форматирование только времени
formatted_time = dt.strftime("%H:%M:%S")
print(formatted_time)  # Вывод: 14:30:45

Метод strptime()

Метод strptime() используется для парсинга строк в объекты datetime по заданному формату.

Пример использования:


import datetime

# Парсинг строки в объект datetime
date_str = "24-05-2023 14:30:45"
dt = datetime.datetime.strptime(date_str, "%d-%m-%Y %H:%M:%S")
print(dt)  # Вывод: 2023-05-24 14:30:45
    
# Парсинг строки в объект date
date_str = "24-05-2023"
d = datetime.datetime.strptime(date_str, "%d-%m-%Y").date()
print(d)  # Вывод: 2023-05-24
    
# Парсинг строки в объект time
time_str = "14:30:45"
t = datetime.datetime.strptime(time_str, "%H:%M:%S").time()
print(t)  # Вывод: 14:30:45

9.3 Работа с часовыми поясами

Как показывает практика, нашими сервисами пользуются люди со всего мира, и, к сожалению, они живут в разных странах и у них разные часовые пояса (timezone). Поэтому вам как программисту нужно уметь работать с ними тоже.

Ну и конечно в Python есть класс и на этот случай:

Класс timezone

Класс timezone из модуля datetime позволяет работать с часовыми поясами.


import datetime

# Создание объекта datetime с часовым поясом UTC
utc_dt = datetime.datetime(2023, 5, 24, 14, 30, 45, tzinfo=datetime.timezone.utc)
print(utc_dt)  # Вывод: 2023-05-24 14:30:45+00:00
        
# Конвертация в другой часовой пояс
tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
tokyo_dt = utc_dt.astimezone(tokyo_tz)
print(tokyo_dt)  # Вывод: 2023-05-24 23:30:45+09:00

Мы разобрали библиотеку datetime очень обзорно, я бы даже сказал поверхностно. В будущем мы ещё раз вернёмся к ней и будем учиться использовать её для более конкретных задач. Сейчас же я хотел просто вас с ней познакомить и расширить, так сказать, ваш взгляд на набор стандартных библиотек.

Про любую библиотеку вы должны в первую очередь знать, что она есть, и представлять, что можно сделать с её помощью. А список функций, их параметров и все их возможности всегда можно почерпнуть из официальной документации.

2
Задача
Модуль 1: Python Core, 8 уровень, 8 лекция
Недоступна
День рождения.
День рождения.
2
Задача
Модуль 1: Python Core, 8 уровень, 8 лекция
Недоступна
Timezone.
Timezone.
1
Опрос
Декораторы, 8 уровень, 8 лекция
Недоступен
Декораторы
Декораторы
Комментарии (11)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 63
1 февраля 2026
❤️
Slevin Уровень 59
1 июля 2025
чтобы не писать постоянно datetime.datetime datetime.time и т.п. используйте импорт конкретных функций, классов (в данном случае) из модуля:

from datetime import datetime, date, timezone

print(datetime.now()) 

"""
тоже что и datetime.datetime если импортировать весь модуль
по сути это такое сокращение. Но учитывайте, что теперь 'datatime'
будет ссылаться именно на класс datetime.datetime, потому, в примере и 
показан импорт остальных классов
"""
print(date.today())
utc_time = datetime.now(timezone.utc)
Anonymous #3577564 Уровень 57
25 июня 2025
Задача: Вывести текущее время в UTC и в заданном часовом поясе. Валидатор: Программа выводит только время, но не дату. ЯсноПонятно
Davich Уровень 44
6 июня 2025
когда решил немного разбавить обстановку,получешь ошибку🙃 Задача не прошла тестирование: Необходимо вывести только количество дней, прошедших с даты рождения, без лишнего текста.
GavilD Уровень 31
20 мая 2025
мозг хорошо прогрелся на втором задании. Спустя 10 мин додумался сделать так dat = datetime.datetime.now() dt_utc = datetime.datetime(dat.year,dat.month,dat.day,dat.hour,dat.minute,dat.second, tzinfo=datetime.timezone.utc)
mila Уровень 20
20 апреля 2025
хоть бы объяснения писали в опросе если неверный ответ
SWK Уровень 26
4 апреля 2025
Ответ на вопрос теста "Что делает декоратор @classmethod?" явно недопередуман.
Rodion Уровень 15
24 марта 2025
print(delta.days)
Mr.Robot Уровень 21 Expert
7 марта 2025
По второй задаче несколько неаккуратно получается. Если запрашивать текущее время через datetime.datetime.now(), а потом переводить его в UTC, то это не будет временем в UTC, а будет тот же локальный часовой пояс, только теперь он получит нулевое смещение (как будто бы он UTC). Валидатор это съедает, но выглядит это не айс.
Sheo Gorath Уровень 7
26 марта 2025
now_utc = datetime.datetime.now(timezone.utc)
Andrey Kochegarov Уровень 1
19 февраля 2025
спасибо stackoverflow за это:

mystring[0:mystring.index(",")]
по второй задаче пришлось курить маны:

print(datetime.datetime.now(datetime.timezone.utc).strftime('%H:%M:%S %Z'))
print(datetime.datetime.now(datetime.timezone(offset=datetime.timedelta(hours=user_offset))).strftime('%H:%M:%S %Z'))