Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
Освоение модуля datetime в Python
Узнайте, как работать с датами и временем в Python через наглядные примеры и чёткие объяснения.
Видео: Python datetime — работа с датами и временем
Модуль datetime Python предоставляет мощные инструменты для манипуляции датами и временем. Ниже мы пройдёмся по распространённым задачам: от получения текущего момента до форматирования и работы с часовыми поясами.
Пример 1: Получение текущей даты и времени
import datetime
datetime_object = datetime.datetime.now()
print(datetime_object)
Вывод будет похож на:
2018-12-19 09:26:03.478039
Здесь мы импортируем модуль с import datetime. Класс datetime содержит метод now(), возвращающий локальные дату и время.
Пример 2: Получение текущей даты
import datetime
date_object = datetime.date.today()
print(date_object)
Вывод:
2018-12-19
Мы используем today() из класса date для получения текущей календарной даты.
Исследование модуля datetime
Запустите dir(datetime) для списка всех атрибутов и классов:
import datetime
print(dir(datetime))
Вывод:
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']
Ключевые классы: date, time, datetime и timedelta.
Класс datetime.date
Класс date представляет календарную дату (год, месяц, день).
Пример 3: Создание объекта даты
import datetime
d = datetime.date(2019, 4, 13)
print(d)
Результат:
2019-04-13
Здесь date() — конструктор, принимающий year, month и day как аргументы.
Переменная a — экземпляр date.
Импорт только класса date:
from datetime import date
a = date(2019, 4, 13)
print(a)
Пример 4: Текущая дата
Используйте класс-метод today():
from datetime import date
today = date.today()
print("Current date =", today)
Пример 5: Из временной метки (timestamp)
Unix timestamp отсчитывает секунды с 1970-01-01 UTC. Конвертируйте с fromtimestamp():
from datetime import date
timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)
Вывод:
Date = 2012-01-11
Пример 6: Доступ к году, месяцу, дню
from datetime import date
today = date.today()
print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)
Класс datetime.time
Класс time хранит время суток без даты.
Пример 7: Создание объектов времени
from datetime import time
a = time()
print("a =", a)
b = time(11, 34, 56)
print("b =", b)
c = time(hour=11, minute=34, second=56)
print("c =", c)
d = time(11, 34, 56, 234566)
print("d =", d)
Результат:
a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34:56.234566
Пример 8: Инспекция компонентов времени
from datetime import time
a = time(11, 34, 56)
print("hour =", a.hour)
print("minute =", a.minute)
print("second =", a.second)
print("microsecond =", a.microsecond)
Вывод:
hour = 11 minute = 34 second = 56 microsecond = 0
Класс datetime.datetime
Класс datetime объединяет информацию о дате и времени.
Пример 9: Создание объекта datetime
from datetime import datetime
# год, месяц, день
A = datetime(2018, 11, 28)
print(A)
# полная спецификация
B = datetime(2017, 11, 28, 23, 55, 59, 342380)
print(B)
Результат:
2018-11-28 00:00:00 2017-11-28 23:55:59.342380
Год, месяц и день обязательны; час, минута, секунда и микросекунда по умолчанию нулевые.
Пример 10: Инспекция компонентов и timestamp
from datetime import datetime
A = datetime(2017, 11, 28, 23, 55, 59, 342380)
print("year =", A.year)
print("month =", A.month)
print("day =", A.day)
print("hour =", A.hour)
print("minute =", A.minute)
print("timestamp =", A.timestamp())
Вывод:
year = 2017 month = 11 day = 28 hour = 23 minute = 55 timestamp = 1511913359.34238
Класс datetime.timedelta
Объект timedelta представляет продолжительность между двумя датами или временами.
Пример 11: Разница между датами и временем
from datetime import datetime, date
T1 = date(year=2018, month=7, day=12)
T2 = date(year=2017, month=12, day=23)
T3 = T1 - T2
print("T3 =", T3)
T4 = datetime(year=2018, month=7, day=12, hour=7, minute=9, second=33)
T5 = datetime(year=2019, month=6, day=10, hour=5, minute=55, second=13)
T6 = T4 - T5
print("T6 =", T6)
print("type of T3 =", type(T3))
print("type of T6 =", type(T6))
Вывод:
T3 = 201 days, 0:00:00 T6 = -333 days, 1:14:20 type of T3 = <class 'datetime.timedelta'> type of T6 = <class 'datetime.timedelta'>
Пример 12: Вычитание объектов timedelta
from datetime import timedelta
T1 = timedelta(weeks=2, days=5, hours=1, seconds=33)
T2 = timedelta(days=4, hours=11, minutes=4, seconds=54)
T3 = T1 - T2
print("T3 =", T3)
Вывод:
T3 = 14 days, 13:55:39
Пример 13: Отрицательный timedelta
from datetime import timedelta
T1 = timedelta(seconds=33)
T2 = timedelta(seconds=54)
T3 = T1 - T2
print("T3 =", T3)
print("abs(T3) =", abs(T3))
Вывод:
T3 = -1 day, 23:59:39 abs(T3) = 0:00:21
Пример 14: Общее количество секунд в timedelta
from datetime import timedelta
T = timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("total seconds =", T.total_seconds())
Вывод:
total seconds = 435633.233423
Можно складывать даты, умножать timedelta на число и делить на float для масштабирования продолжительностей.
Форматирование и разбор дат
Разные локали используют различные форматы дат (например, mm/dd/yyyy в США против dd/mm/yyyy в UK). Методы Python strftime() и strptime() помогают конвертировать между объектами datetime и форматированными строками.
Python strftime() — datetime в строку
from datetime import datetime
now = datetime.now()
# Час:минута:секунда
T = now.strftime("%H:%M:%S")
print("time:", T)
# US формат
S1 = now.strftime("%m/%d/%Y, %H:%M:%S")
print("S1:", S1)
# UK формат
S2 = now.strftime("%d/%m/%Y, %H:%M:%S")
print("S2:", S2)
Типичный вывод:
time: 04:34:52 S1: 12/26/2018, 04:34:52 S2: 26/12/2018, 04:34:52
Частые коды формата: %Y год, %m месяц, %d день, %H час, %M минута, %S секунда.
Python strptime() — строка в datetime
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
Вывод:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
Здесь %d — день, %B — полное название месяца, %Y — год.
Осведомлённость о часовых поясах (Timezone Awareness)
Для приложений, которым нужно отображать или вычислять время в разных зонах, избегайте ручных расчётов и используйте библиотеку pytz.
from datetime import datetime
import pytz
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
tz_NY = pytz.timezone('America/New_York')
dt_NY = datetime.now(tz_NY)
print("NY:", dt_NY.strftime("%m/%d/%Y, %H:%M:%S"))
tz_London = pytz.timezone('Europe/London')
dt_London = datetime.now(tz_London)
print("London:", dt_London.strftime("%m/%d/%Y, %H:%M:%S"))
Пример вывода:
Local: 12/20/2018, 13:10:44 NY: 12/20/2018, 08:10:44 London: 12/20/2018, 13:10:44
Объекты datetime_NY и datetime_London содержат timezone-aware временные метки.
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Словари в Python: создание, манипуляции и продвинутые техники
- Итераторы в Python: как они работают и как создать свои
- Замыкания в Python: как вложенные функции захватывают переменные
- Получение текущей даты и времени в Python: практическое руководство
- Python: получение текущего времени и работы с часовыми поясами
- Освоение Python time.sleep(): лучшие практики, многопоточность и реальные примеры