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 лекция
Недоступен
Декораторы
Декораторы
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
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 Уровень 24
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 Уровень 15
26 марта 2025
now_utc = datetime.datetime.now(timezone.utc)
Andrey Kochegarov Уровень 64
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'))