Python datetime

Модуль datetime является стандартным модулем языка Python и предоставляет классы для работы с датами и временем. Этот модуль позволяет выполнять различные операции с датами, такие как сравнение дат, вычисление разницы между датами, форматирование даты и времени, а также многое другое.

Классы модуля datetime

  • datetime.date: представляет дату в формате ГГГГ-ММ-ДД.
  • datetime.time: представляет время в формате ЧЧ:ММ:СС:МКС.
  • datetime.datetime: представляет комбинированную дату и время.
  • datetime.timedelta: представляет разницу между двумя моментами времени.

Класс datetime.date

Класс datetime.date представляет дату в формате ГГГГ-ММ-ДД.

Пример использования класса datetime.date:

from datetime import date

today = date.today()
print(today)  # Вывод: 2022-02-14

В этом примере мы создаем объект today класса datetime.date, который представляет текущую дату. При печати этого объекта мы получаем дату в формате ГГГГ-ММ-ДД.

Класс datetime.time

Класс datetime.time представляет время в формате ЧЧ:ММ:СС:МКС.

Пример использования класса datetime.time:

from datetime import time

current_time = time(12, 30, 0)
print(current_time)  # Вывод: 12:30:00

В этом примере мы создаем объект current_time класса datetime.time, который представляет время 12:30:00. При печати этого объекта мы получаем время в формате ЧЧ:ММ:СС.

Класс datetime.datetime

Класс datetime.datetime представляет комбинированную дату и время.

Пример использования класса datetime.datetime:

from datetime import datetime

now = datetime.now()
print(now)  # Вывод: 2022-02-14 12:30:00.123456

В этом примере мы создаем объект now класса datetime.datetime, который представляет текущую комбинированную дату и время. При печати этого объекта мы получаем комбинированную дату и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.МКС.

Класс datetime.timedelta

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

Пример использования класса datetime.timedelta:

from datetime import datetime, timedelta

start_time = datetime(2022, 1, 1)
end_time = datetime(2022, 2, 1)
duration = end_time - start_time
print(duration)  # Вывод: 31 days, 0:00:00

В этом примере мы создаем объект duration класса datetime.timedelta, который представляет разницу между start_time и end_time. При печати этого объекта мы получаем разницу в днях, часах, минутах и секундах.

Метод strftime

Метод strftime(format) из модуля datetime в языке Python позволяет форматировать дату и время в заданном формате. Он принимает один параметр:

  • format: Строка с указанием желаемого формата вывода.

Метод strftime() используется для преобразования объекта datetime в строку, согласно заданному формату. Формат задается с помощью специальных символов, называемых директивами формата. Каждая директива представляет собой символ, перед которым ставится знак процента (%).

Примеры директив формата:

  • %Y: Год в четырехзначном формате (например, 2022)
  • %m: Месяц в виде числа (от 01 до 12)
  • %d: День месяца в виде числа (от 01 до 31)
  • %H: Часы в 24-часовом формате (от 00 до 23)
  • %M: Минуты (от 00 до 59)
  • %S: Секунды (от 00 до 59)
  • %A: День недели полностью записанный (например, "Monday")
  • %B: Название месяца полностью записанное (например, "January")

Пример использования метода strftime():

from datetime import datetime

now = datetime.now()

formatted_date = now.strftime("%Y-%m-%d")
print(formatted_date)
# Вывод: "2022-01-01"

formatted_time = now.strftime("%H:%M:%S")
print(formatted_time)
# Вывод: "12:30:45"

formatted_datetime = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime)
# Вывод: "2022-01-01 12:30:45"

Метод strptime

Метод strptime(date_string, format) из модуля datetime в языке Python позволяет преобразовать строку в объект datetime, используя заданный формат даты и времени. Он принимает два параметра:

  • date_string: Строка, содержащая дату и время в заданном формате.
  • format: Строка с указанием формата даты и времени входной строки.

Метод strptime() используется для преобразования строки в объект datetime в соответствии с указанным форматом. Для этого также используются директивы формата, аналогичные методу strftime().

Пример использования метода strptime():

from datetime import datetime

date_string = "2022-01-01"
formatted_date = datetime.strptime(date_string, "%Y-%m-%d")
print(formatted_date)
# Вывод: 2022-01-01 00:00:00

time_string = "12:30:45"
formatted_time = datetime.strptime(time_string, "%H:%M:%S")
print(formatted_time)
# Вывод: 1900-01-01 12:30:45

Модуль datetime: класс timezone

Модуль datetime в языке Python предоставляет класс timezone, который позволяет работать с часовыми поясами. Класс timezone содержит информацию о смещении часовых поясов относительно времени UTC (координированное всемирное время).

Для использования класса timezone необходимо сначала импортировать его из модуля datetime.

from datetime import timezone

Класс timezone имеет несколько предопределенных атрибутов, таких как timezone.utc, представляющий UTC, и timezone.min, представляющий минимальное смещение в часовых поясах.

Кроме того, можно создать собственный объект timezone, указав смещение относительно UTC в секундах. Для этого можно воспользоваться методом timezone(offset), где offset - это количество секунд.

Пример создания собственного объекта timezone:

import datetime

# Создание объекта timezone смещениями +03:00 и +04:00
tz1 = datetime.timezone(datetime.timedelta(hours=3))
tz2 = datetime.timezone(datetime.timedelta(hours=4))

# Использование объектов timezone
now = datetime.datetime.now(tz1)
print(now)  
# Вывод: текущее время в часовом поясе +03:00

future = now + datetime.timedelta(hours=1)
print(future)  
# Вывод: текущее время + 1 час в часовом поясе +03:00

future_tz2 = future.astimezone(tz2)
print(future_tz2)
# Вывод: текущее время + 1 час в часовом поясе +04:00

В данном примере создаются два объекта timezone с разными смещениями: tz1 с смещением +03:00 и tz2 с смещением +04:00. Затем создается объект now, представляющий текущее время в часовом поясе tz1. С помощью метода astimezone() можно изменить часовой пояс объекта now на tz2, получив объект future_tz2.

Класс timezone также поддерживает различные методы и операции для работы с временем и смещением, такие как преобразование времени в другой часовой пояс, арифметические операции с смещением и т.д.

Подробную информацию о классе timezone и его методах можно найти в официальной документации Python: [https://docs.python.org/3/library/datetime.html#datetime.timezone](https://docs.python.org/3/library/datetime.html#datetime.timezone)

Модуль datetime: класс tzinfo

Класс tzinfo является абстрактным базовым классом, который определяет интерфейс для классов, представляющих информацию о часовых поясах. Он содержит методы, которые должны быть реализованы в конкретных подклассах для работы с конкретными часовыми поясами.

Несмотря на то, что класс tzinfo является абстрактным, сам по себе он содержит некоторую функциональность и методы, которые могут быть использованы для работы с часовыми поясами.

Методы класса tzinfo

Класс tzinfo определяет следующие методы, которые могут быть реализованы в подклассах:

  • utcoffset(self, dt): Возвращает смещение времени относительно UTC для указанной даты и времени.
  • dst(self, dt): Возвращает информацию о временном сдвиге, включая переход на летнее время или обратный переход на стандартное время, для указанной даты и времени.
  • tzname(self, dt): Возвращает человекочитаемое имя часового пояса для указанной даты и времени.
  • fromutc(self, dt): Преобразует указанную дату и время из UTC в часовой пояс.
  • utcfromtimestamp(cls, timestamp): Возвращает дату и время в UTC, основываясь на указанном метке времени.
  • now(cls): Возвращает текущую дату и время в часовом поясе.
  • dst(self, dt): Возвращает информацию о временном сдвиге, включая переход на летнее время или обратный переход на стандартное время, для указанной даты и времени.

Стандартные подклассы tzinfo

В модуле datetime также определены несколько стандартных подклассов tzinfo, которые могут быть использованы для представления различных часовых поясов. Некоторые из этих подклассов включают:

  • timezone: Позволяет представлять фиксированные смещения относительно UTC.
  • timedelta: Представляет разницу между двумя моментами времени, включая часовые пояса.
  • dst: Предоставляет информацию о переходе на летнее время или обратном переходе на стандартное время для указанной временной зоны.
  • tzstr: Позволяет представлять информацию о часовых поясах в строковом формате.
  • utc: Представляет часовой пояс UTC (всемирное координированное время).

Пример использования класса tzinfo:

from datetime import datetime, tzinfo, timedelta

class MyTimeZone(tzinfo):
    def __init__(self, name, offset):
        self.name = name
        self.offset = offset

    def utcoffset(self, dt):
        return timedelta(hours=self.offset)

    def tzname(self, dt):
        return self.name

    def dst(self, dt):
        return timedelta(0)

    def fromutc(self, dt):
        return dt + timedelta(hours=self.offset)

my_timezone = MyTimeZone("My Time Zone", 2)
current_time = datetime.now(my_timezone)
print(current_time)