Модуль Python Datetime

Модуль Datetime позволяет нам работать с объектами даты и времени. Он предоставляет три дополнительных типа данных: date, time и datetime.

import datetime

date()

datetime.date(year: int, month: int, day: int)

Метод date возвращает объект date с атрибутами year, month и day:

from datetime import date
# Создать объект date
obj = date(2022, 12, 1)
# Доступ к атрибуту year
obj.year
2022
obj.month
12
obj.day
1

time()

datetime.time(hour: int, minute: int, second: int)

Метод time возвращает объект time с атрибутами hour, minute, second, microsecond и tzinfo:

from datetime import time
# Создать объект time
obj = time(10, 20, 33)
# Доступ к атрибуту hour
obj.hour
10
obj.second
33
obj.microsecond
0

datetime()

datetime.datetime(year, month, day, hour, minute, second)

datetime возвращает объект, содержащий атрибуты как date, так и time:

from datetime import datetime
# Создать объект datetime с датой и временем
obj = datetime(2024, 12, 1, 15, 35, 59)
# Доступ к атрибуту year
obj.year
2024
obj.month
12
obj.day
1
obj.hour
15
obj.second
59

now() и today()

Методы now и today возвращают объект datetime с точным системным днем и временем:

from datetime import datetime
# Получить текущую дату и время
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 19, 56, 49, 589806)

Поскольку возвращаемый объект является datetime, мы можем получить доступ как к атрибутам date, так и к time:

now.date()
datetime.date(2022, 7, 23)
now.time()
datetime.time(19, 56, 49, 589806)
now.year
2022
now.month
7
now.day
23
now.hour
19
now.minute
56
now.second
49
now.microsecond
589806

Кроме того, now может принимать объект timezone в качестве необязательного параметра:

from datetime import datetime, timezone
# Получить текущее время UTC
datetime.now(timezone.utc)
datetime.datetime(2022, 7, 24, 0, 20, 8, 265634, tzinfo=datetime.timezone.utc)

Если параметр timezone не указан, now по умолчанию использует системный часовой пояс.

strftime() и strptime()

Вы можете легко преобразовывать строки в объекты datetime и обратно с помощью методов strftime и strptime.

strftime()

strftime позволяет нам создавать отформатированные для человека строки из объекта Python datetime:

from datetime import datetime
# Получить текущую дату и время для примеров форматирования
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 20, 31, 19, 751479)
# Форматировать datetime как день-месяц-год с сокращенным месяцем
now.strftime("%d-%b-%Y")
'23-Jul-2022'
# Форматировать datetime как день-месяц-год с числовым месяцем
now.strftime("%d-%m-%Y")
'23-07-2022'
# Форматировать datetime как месяц/день/год
now.strftime("%m/%d/%Y")
'07/23/2022'
# Форматировать datetime с датой и временем
now.strftime("%b/%d/%Y - %H:%M:%S")
'Jul/23/2022 - 20:31:19'

Строки, передаваемые в strftime, могут показаться немного странными, но их значение довольно легко понять. Например, %m/%d/%Y вернет месяц, день и год, разделенные / (07/23/2022).

strptime()

Метод strptime создает объект datetime из строки.

Этот метод принимает два параметра:

obj.strptime(datetime_string, format)
  • Строка, представляющая объект datetime.
  • Эквивалентный этой строке код формата Python.
from datetime import datetime

# Разобрать строку в объект datetime
datetime_str = '12-Jul-2023'
datetime.strptime(datetime_str, '%d-%b-%Y')
datetime.datetime(2023, 7, 12, 0, 0)
# Разобрать строку с датой и временем
datetime_str = 'Jul/12/2023 - 14:38:37'
datetime.strptime(datetime_str, "%b/%d/%Y - %H:%M:%S")
datetime.datetime(2023, 7, 12, 14, 38, 37)

Коды Формата

ДирективаЗначениеПример
%aСокращенное название дня недели по локали.Sun, Mon, …, Sat (en_US)
%AПолное название дня недели по локали.Sunday, Monday, …, Saturday (en_US)
%wДень недели в виде десятичного числа, где 0 — воскресенье, а 6 — суббота.0, 1, …, 6
%dДень месяца в виде десятичного числа с заполнением нулями слева.01, 02, …, 31
%bСокращенное название месяца по локали.Jan, Feb, …, Dec (en_US)
%BПолное название месяца по локали.January, February, …, December (en_US)
%mМесяц в виде десятичного числа с заполнением нулями слева.01, 02, …, 12
%yГод без века в виде десятичного числа с заполнением нулями слева.00, 01, …, 99
%YГод с веком в виде десятичного числа.0001, 0002, …, 2013, 2014, …, 9998, 9999
%HЧас (24-часовой формат) в виде десятичного числа с заполнением нулями слева.00, 01, …, 23
%IЧас (12-часовой формат) в виде десятичного числа с заполнением нулями слева.01, 02, …, 12
%pЭквивалент AM или PM по локали.AM, PM (en_US)
%MМинута в виде десятичного числа с заполнением нулями слева.00, 01, …, 59
%SСекунда в виде десятичного числа с заполнением нулями слева.00, 01, …, 59
%fМикросекунда в виде десятичного числа, с заполнением нулями слева.000000, 000001, …, 999999
%zСмещение UTC в формате ±HHMM[SS[.ffffff]] (пустая строка, если объект “наивный”).(пусто), +0000, -0400, +1030, +063415, -030712.345216
%ZНазвание часового пояса (пустая строка, если объект “наивный”).(пусто), UTC, GMT
%jДень года в виде десятичного числа с заполнением нулями слева.001, 002, …, 366
%UНомер недели в году (воскресенье как первый день недели) в виде десятичного числа с заполнением нулями слева. Все дни в новом году, предшествующие первому воскресенью, считаются неделей 0.00, 01, …, 53
%WНомер недели в году (понедельник как первый день недели) в виде десятичного числа. Все дни в новом году, предшествующие первому понедельнику, считаются неделей 0.00, 01, …, 53
%cСоответствующее представление даты и времени по локали.Tue Aug 16 21:30:00 1988 (en_US)
%xСоответствующее представление даты по локали.08/16/88 (None)
%XСоответствующее представление времени по локали.21:30:00 (en_US)
%%Буквальный символ '%'.%

timedelta()

Объект timedelta представляет разницу между двумя датами или временами.

from datetime import datetime

# Создать два объекта datetime
date_1 = datetime.strptime('12-Jul-2023', '%d-%b-%Y')
date_2 = datetime.strptime('01-Jan-2024', '%d-%b-%Y')

# Вычислить разницу (возвращает timedelta)
difference = date_2 - date_1
difference
datetime.timedelta(days=173)
# Получить количество дней из timedelta
difference.days
173

timedelta может добавлять days, seconds и microseconds к объекту datetime:

from datetime import datetime, timedelta

# Получить текущую дату и время для операций с timedelta
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# Добавить 10 дней и 15 секунд к текущей дате и времени
now + timedelta(days=10, seconds=15)
datetime.datetime(2022, 8, 2, 21, 25, 17, 341081)

И может вычитать days, seconds и microseconds из объекта datetime:

from datetime import datetime, timedelta

# Получить текущую дату и время для примера вычитания
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# Вычесть 10 дней и 15 секунд из текущей даты и времени
now - timedelta(days=10, seconds=15)
datetime.datetime(2022, 7, 13, 21, 59, 41, 100883)

Соответствующие ссылки

Morty Proxy This is a proxified and sanitized view of the page, visit original site.