Работа с классом datetime

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

Создание объекта datetime возможно с помощью нескольких методов. Наиболее распространённый способ — использование конструктора, где можно указать год, месяц, день, час, минуты и секунды. Например, datetime(2023, 10, 1, 12, 30) создаст объект, представляющий 1 октября 2023 года в 12:30. Кроме того, модуль datetime включает в себя классы date, time и timedelta, каждый из которых подходит для специфических задач.

Чтобы начать работать с этим классом, его нужно сперва импортировать. Предпочтительнее импортировать как показано ниже

from datetime import datetime 
datetime(2023, 4, 16, 12, 30, 45, 500000)

Но можете встретить и такой вариант импортирования

import datetime
datetime.datetime(2023, 4, 16, 12, 30, 45, 500000)

Создание экземпляра времени в Python

Вызовем справку этого класса:

Обратите внимание здесь нужно на следующие вещи:

  1. класс datetime наследуется от класса date 
  2. квадратные скобки, они появляются только с параметра hour. Это значит, что все параметры до hour являются обязательными.

Давайте перечислим все параметры с их описанием:

  • year - год (от 1 до 9999), является обязательным для заполнения

  • month - месяц (от 1 до 12), является обязательным для заполнения

  • day - день (от 1 до 31), является обязательным для заполнения

  • hour - часы (от 0 до 23), является необязательным параметром. Если не указан, по умолчанию он будет равен 0

  • minute - минуты (от 0 до 59), является необязательным параметром. Если не указан, по умолчанию он будет равен 0

  • second - секунды (от 0 до 59), является необязательным параметром. Если не указан, по умолчанию он будет равен 0

  • microsecond - микросекунды (от 0 до 999999), по умолчанию 0;

  • tzinfo - информация о часовом поясе (объект типа datetime.timezone), по умолчанию None.

Значит для создания объекта datetime мы можем передавать разное количество аргументов, но минимум три (год, месяц и день). Давайте взглянем на эти варианты:

my_date1 = datetime(2023, 4, 16)
print(my_date1)  # 2023-04-16 00:00:00
my_date2 = datetime(2023, 4, 16, 10, 30)
print(my_date2)  # 2023-04-16 10:30:00
my_date3 = datetime(2023, 4, 16, 10, 30, 15)
print(my_date3)  # 2023-04-16 10:30:15

Обратите внимание, что datetime.datetime по умолчанию выводится в определенном формате:

Соответствует следующему формату

YYYY-MM-DD HH:MM:SS

Если присутствуют миллисекунды формат будет в таком виде

YYYY-MM-DD HH:MM:SS.mmmmmm

Как и в случаях с датой и временем вы должны передать только допустимые значения для аргументов. При попытке создать datetime.datetime с невалидными(неправильными) значениями вы увидите ошибку.

Также datetime.datetime можно создавать при помощи передачи значений в именованные атрибуты. Но не забывайте про обязательные атрибуты, которые нужно передать в любом случае:

from datetime import datetime

date1 = datetime(month=4, day=16, year=2023)
print(date1)

date2 = datetime(year=2023, month=4, day=16,
                 minute=30, second=15)
print(date2)

date3 = datetime(year=2023, month=4, day=16,
                 hour=10, minute=30, second=15)
print(date3)

date4 = datetime(hour=10, minute=30, year=2023,
                 microsecond=500000, month=4, day=16, second=15, )
print(date4)

 Доступ к отдельным компонентам

Объект datetime имеет сразу все свойства, которые были отдельно у времени и у даты, а именно:

  • свойство year
  • свойство month
  • свойство day
  • свойство hour
  • свойство minute
  • свойство second
  • свойство microsecond

Проверим работу:

from datetime import datetime

full_datetime = datetime(
  month=12, day=31, year=2005,
  minute=21, second=10, hour=4,
  microsecond=7)
  
print(full_datetime.year)
print(full_datetime.month)
print(full_datetime.day)
print(full_datetime.hour)
print(full_datetime.minute)
print(full_datetime.second)
print(full_datetime.microsecond)

Данные свойства предоставляют доступ к перечисленным атрибутам только на чтение. Запись в объект datetime новое значение не получится. Объект datetime является неизменяемым объектом. Вы получите ошибку, если попробуйте через присвоение изменить значение у текущего объекта.

Атрибуты и методы класса datetime в Python

 

Атрибуты max и min

При помощи атрибута .max вы можете получить значение максимальной даты и времени, которое равно 31 декабря 9999 года 23:59:59.999999, а при помощи атрибута .min - значение минимальной даты, которое равно 1 января 1 года 00:00:00.

Обращаться к этим атрибутам можно как через сам класс datetime, так и через экземпляры объекта datetime

from datetime import datetime
print(datetime.min)
print(datetime.max)

print('-------')

 

Методы now и today

При помощи данных методов можно получить значение текущей даты и времени. Метод .today() унаследован от класса date, метод .now() является своим собственным методом для класса datetime и его использование является предпочтительнее

from datetime import datetime

print('Today is :', datetime.now())
print()
print('Today is :', datetime.today())

 

Методы .date() и .time()

Объект datetime представляет собой комбинацию времени и даты. Если вы хотите получить одну составляющую отдельно от другой (либо только дату или только время), то можете воспользоваться методами .date() и .time() . Соответственно метод .date() позволит получить дату, метод .time() - время.

from datetime import datetime


dt = datetime(2015, 8, 21, 10, 5, 30)
print(dt, type(dt))

only_date = dt.date()
print('Only date', only_date, type(only_date))

only_time = dt.time()
print('Only time', only_time, type(only_time))

Обратите внимание на тип данных, метод .date() возвращает экземпляр даты, а метод .time() - экземпляр времени.

 

Метод .combine()

При помощи метод .date() и .time() мы одно общее значение могли разбить на две составляющие. А метод .combine()выполняет обратную операцию: он позволяет отдельно из даты и отдельно из времени создать объект дата-время

from datetime import date, time, datetime

my_date = date(2015, 8, 21)
my_time = time(10, 5, 30)

dt = datetime.combine(my_date, my_time)
print(dt, type(dt))   # 2015-08-21 10:05:30 <class 'datetime.datetime'>

 

Метод .replace()

Метод replace() также разбирали в уроке про класс date. Здесь имеет ровно такое же поведение, только количество атрибутов для изменения в отличии от даты увеличилось. Стали доступны еще часы, минуты, секунды. Метод replace() не изменяет оригинальный объект, а возвращает новый объект типа datetime  измененными значениями атрибутов.

from datetime import datetime

now = datetime.now()
print('Сегодня:', now). # Сегодня: 2024-10-20 12:25:02.174479

new_date = now.replace(day=14, year=2014, second=5)
print(new_date, type(new_date))  # 2014-10-14 12:25:05.174479 <class 'datetime.datetime'>

print(now.replace(month=1))    # 2024-1-20 12:25:05.174479

 

Перейти к следующему шагу

Комментарии