Модуль datetime в Python
PythondatetimeМодуль — это стандартный библиотечный модуль для обработки дат и времени. Он предоставляет несколько классов и функций, которые помогают нам легко выполнять операции с датами, временем и разницей во времени. Будь то получение текущего времени, форматирование дат или вычисление разницы во времени,datetimeмодуль может справиться со всем этим.
Основные классы модуля datetime
datetimeМодуль содержит следующие основные классы:
dateкласс -dateКласс используется для представления даты и содержит три атрибута: год, месяц и день.-
timeкласс -timeКласс используется для представления времени и содержит такие атрибуты, как час, минута, секунда и микросекунда. -
datetimeкласс -datetimeКласс — этоdateиtimeкомбинация обоих и может представлять дату и время одновременно. -
timedeltaкласс -timedeltaКласс используется для представления разницы во времени и может применяться для операций сложения и вычитания с датами и временем.
Использование модуля datetime
Получение текущей даты и времени
Метод классаdatetimemethodnow()метод для получения текущей даты и времени.
Пример
# Получить текущую дату и время
now = datetime.now()
print("Текущее время:", now)
Пример вывода:
当前时间: 2025-04-22 14:30:45.123456
Создание конкретной даты и времени
Метод классаdatetimeконструктор для создания конкретной даты и времени.
Пример
# Создать конкретную дату и время
specific_time = datetime(2025, 4, 22, 15, 30, 0)
print("Конкретное время:", specific_time)
Пример вывода:
特定时间: 2025-04-22 15:30:00
Форматирование даты и времени
datetimeОбъекты можноstrftime()отформатировать в строку с помощью метода.
Пример
# Получить текущее время
now = datetime.now()
# Отформатировать вывод
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("Форматированное время:", formatted_time)
Пример вывода:
格式化时间: 2025-04-22 14:30:45
Вычисление разницы во времени
timedeltaКласс можно использовать для вычисления разницы между двумя датами или временем.
Пример
# Получить текущее время
now = datetime.now()
# Вычислить время через 10 дней
future_time = now + timedelta(days=10)
print("Время через 10 дней:", future_time)
Пример вывода:
10 天后的时间: 2025-05-02 14:30:45.123456
Типичные случаи использования
Вычисление количества дней между двумя датами
Пример
# Создать две даты
date1 = date(2025, 4, 22)
date2 = date(2025, 5, 1)
# Вычислить разницу в днях
delta = date2 - date1
print("Разница в днях между двумя датами:", delta.days)
Пример вывода:
两个日期之间的天数差: 9
Работа с часовыми поясами
datetimeСам модуль напрямую не поддерживает операции с часовыми поясами, но это можно делать с помощьюpytzбиблиотеки для работы с часовыми поясами.
Пример
import pytz
# Получить текущее время и установить часовой пояс
now = datetime.now(pytz.timezone('Asia/Shanghai'))
print("Текущее время в Шанхае:", now)
Пример вывода:
上海当前时间: 2025-04-22 14:30:45.123456+08:00
Общие классы, методы и атрибуты
1. Основные классы
| Класс | Описание | Пример |
|---|---|---|
datetime.date |
Класс Date (год, месяц, день) | date(2023, 5, 15) |
datetime.time |
Класс Time (час, минута, секунда, микросекунда) | time(14, 30, 0) |
datetime.datetime |
Класс Datetime (содержит дату и время) | datetime(2023, 5, 15, 14, 30) |
datetime.timedelta |
Класс временного интервала (для вычислений с датой/временем) | timedelta(days=5) |
datetime.tzinfo |
Базовый класс информации о часовом поясе (требует создания подкласса для реализации) | Пользовательский класс часового пояса |
2. dateОбщие методы/атрибуты объекта
| Метод/атрибут | Описание | Пример |
|---|---|---|
date.today() |
Возвращает текущую локальную дату | date.today() → date(2023, 5, 15) |
date.fromisoformat(str) |
fromYYYY-MM-DDРазбирает дату из строки |
date.fromisoformat("2023-05-15") |
date.year |
Год (только для чтения) | d.year → 2023 |
date.month |
Месяц (1-12, только для чтения) | d.month → 5 |
date.day |
День (1-31, только для чтения) | d.day → 15 |
date.weekday() |
Возвращает день недели (0=понедельник, 6=воскресенье) | d.weekday() → 0 |
date.isoformat() |
ВозвращаетYYYY-MM-DDстрока формата |
d.isoformat() → "2023-05-15" |
date.strftime(format) |
Пользовательский форматированный вывод | d.strftime("%Y/%m/%d") → "2023/05/15" |
3. timeОбщие методы/атрибуты объекта
| Метод/атрибут | Описание | Пример |
|---|---|---|
time.hour |
Час (0-23, только для чтения) | t.hour → 14 |
time.minute |
Минута (0-59, только для чтения) | t.minute → 30 |
time.second |
Секунда (0-59, только для чтения) | t.second → 0 |
time.microsecond |
Микросекунда (0-999999, только для чтения) | t.microsecond → 0 |
time.isoformat() |
ВозвращаетHH:MM:SS.mmmmmmстрока формата |
t.isoformat() → "14:30:00" |
time.strftime(format) |
Пользовательский форматированный вывод | t.strftime("%H:%M") → "14:30" |
4. datetimeОбщие методы/атрибуты объекта
| Метод/атрибут | Описание | Пример |
|---|---|---|
datetime.now() |
Возвращает текущую локальную дату и время | datetime.now() → datetime(2023, 5, 15, 14, 30, 0) |
datetime.utcnow() |
Возвращает текущую дату и время в UTC | datetime.utcnow() |
datetime.fromtimestamp(ts) |
Создаёт из метки времениdatetimeобъект |
datetime.fromtimestamp(1684146600) |
datetime.timestamp() |
Возвращает метку времени (секунды с плавающей точкой) | dt.timestamp() → 1684146600.0 |
datetime.date() |
Извлекает часть с датой | dt.date() → date(2023, 5, 15) |
datetime.time() |
Извлекает часть со временем | dt.time() → time(14, 30) |
datetime.year |
Год (то же, чтоdate) |
dt.year → 2023 |
datetime.strftime(format) |
Пользовательский форматированный вывод | dt.strftime("%Y-%m-%d %H:%M") → "2023-05-15 14:30" |
5. timedeltaОбщие атрибуты объекта
| Attribute | Описание | Пример |
|---|---|---|
days |
Дни (могут быть положительными или отрицательными) | delta.days → 5 |
seconds |
Секунды (0-86399) | delta.seconds → 3600(1 час) |
microseconds |
Микросекунды (0-999999) | delta.microseconds → 0 |
6. Общие символы форматирования (strftime)
| Символ | Описание | Пример вывода |
|---|---|---|
%Y |
Четырёхзначный год | 2023 |
%m |
Двузначный месяц (01-12) | 05 |
%d |
Двузначный день (01-31) | 15 |
%H |
Час в 24-часовом формате (00-23) | 14 |
%M |
Минута (00-59) | 30 |
%S |
Секунда (00-59) | 00 |
%A |
Полное название дня недели | Monday |
%a |
Сокращенное название дня недели | Mon |
%B |
Полное название месяца | May |
%b |
Сокращенное название месяца | May |
Пример
1. Вычисление разницы дат
Пример
d1 = date(2023, 5, 15)
d2 = date(2023, 6, 1)
delta = d2 - d1 # Возвращает объект timedelta
print(delta.days) # Вывод: 17
2. Сложение и вычитание времени
Пример
now = datetime.now()
future = now + timedelta(days=3, hours=2)
print(future.strftime("%Y-%m-%d %H:%M"))
3. Преобразование часовых поясов (требуется установить pytz)
Пример
import pytz
utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)
beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(beijing_time)
4. Разбор строк
Пример
dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt.year) # Вывод: 2023
Примечания
Неизменяемость: Все
datetimeобъекты неизменяемы; операции возвращают новые объекты.Обработка часовых поясов: Нативная
datetimeне поддерживает часовые пояса; используйтеpytzили Python 3.9+zoneinfo。Производительность: Частое создание объектов может влиять на производительность; рассмотрите повторное использование или кэширование.
Проверка границ: Некорректные даты (например,
date(2023, 2, 30)) вызовутValueError。