Модуль datetime в Python

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

Основные классы модуля datetime

datetimeМодуль содержит следующие основные классы:

  • dateкласс -dateКласс используется для представления даты и содержит три атрибута: год, месяц и день.

  • timeкласс -timeКласс используется для представления времени и содержит такие атрибуты, как час, минута, секунда и микросекунда.

  • datetimeкласс -datetimeКласс — этоdateиtimeкомбинация обоих и может представлять дату и время одновременно.

  • timedeltaкласс -timedeltaКласс используется для представления разницы во времени и может применяться для операций сложения и вычитания с датами и временем.


Использование модуля datetime

Получение текущей даты и времени

Метод классаdatetimemethodnow()метод для получения текущей даты и времени.

Пример

from datetime import datetime

# Получить текущую дату и время
now = datetime.now()
print("Текущее время:", now)

Пример вывода:

当前时间: 2025-04-22 14:30:45.123456

Создание конкретной даты и времени

Метод классаdatetimeконструктор для создания конкретной даты и времени.

Пример

from datetime import datetime

# Создать конкретную дату и время
specific_time = datetime(2025, 4, 22, 15, 30, 0)
print("Конкретное время:", specific_time)

Пример вывода:

特定时间: 2025-04-22 15:30:00

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

datetimeОбъекты можноstrftime()отформатировать в строку с помощью метода.

Пример

from datetime import datetime

# Получить текущее время
now = datetime.now()

# Отформатировать вывод
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("Форматированное время:", formatted_time)

Пример вывода:

格式化时间: 2025-04-22 14:30:45

Вычисление разницы во времени

timedeltaКласс можно использовать для вычисления разницы между двумя датами или временем.

Пример

from datetime import datetime, timedelta

# Получить текущее время
now = datetime.now()

# Вычислить время через 10 дней
future_time = now + timedelta(days=10)
print("Время через 10 дней:", future_time)

Пример вывода:

10 天后的时间: 2025-05-02 14:30:45.123456

Типичные случаи использования

Вычисление количества дней между двумя датами

Пример

from datetime import date

# Создать две даты
date1 = date(2025, 4, 22)
date2 = date(2025, 5, 1)

# Вычислить разницу в днях
delta = date2 - date1
print("Разница в днях между двумя датами:", delta.days)

Пример вывода:

两个日期之间的天数差: 9

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

datetimeСам модуль напрямую не поддерживает операции с часовыми поясами, но это можно делать с помощьюpytzбиблиотеки для работы с часовыми поясами.

Пример

from datetime import datetime
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. Вычисление разницы дат

Пример

from datetime import date, timedelta

d1 = date(2023, 5, 15)
d2 = date(2023, 6, 1)
delta = d2 - d1  # Возвращает объект timedelta
print(delta.days)  # Вывод: 17

2. Сложение и вычитание времени

Пример

from datetime import datetime, timedelta

now = datetime.now()
future = now + timedelta(days=3, hours=2)
print(future.strftime("%Y-%m-%d %H:%M"))

3. Преобразование часовых поясов (требуется установить pytz)

Пример

from datetime import datetime
import pytz

utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)
beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(beijing_time)

4. Разбор строк

Пример

from datetime import datetime

dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt.year)  # Вывод: 2023

Примечания

  1. Неизменяемость: Всеdatetimeобъекты неизменяемы; операции возвращают новые объекты.

  2. Обработка часовых поясов: Нативнаяdatetimeне поддерживает часовые пояса; используйтеpytzили Python 3.9+zoneinfo。

  3. Производительность: Частое создание объектов может влиять на производительность; рассмотрите повторное использование или кэширование.

  4. Проверка границ: Некорректные даты (например,date(2023, 2, 30)) вызовутValueError。

Другие расширения