Класс timedelta предназначен для удобного выполнения различных манипуляций над датами и временем. Можно создать объект данного класса, воспользовавшись конструктором. Аргументами являются дни, часы, минуты, секунды, микросекунды и недели, задать которые можно с помощью прямого обращения к именам свойств, как это показано в следующем примере. Как и раньше, метод print позволяет выводить сведения о дате на экран, а функция type отображает тип созданного объекта.
from datetime import timedelta
a = timedelta(days=5, hours=21, minutes=2, seconds=37)
print(a)
print(type(a))
5 days, 21:02:37
Также можно прибавлять разные даты, формируя тем самым новый объект. В следующем примере показано, как получить сумму двух разных дат, воспользовавшись арифметической операцией для переменных a и b. Результат данного действия присваивается объекту под названием c, после чего выводится на экран в обычном формате при помощи метода print.
from datetime import datetime, timedelta
a = datetime(2022, 12, 5)
b = timedelta(hours=2, minutes=5, seconds=17)
print(a)
c = a + b
print(c)
2022-12-05 00:00:00
2022-12-05 02:05:17
tzinfo и timezone
Классы tzinfo и timezone применяются для работы с информацией, которая содержит сведения о часовых поясах. Создать объект, принадлежащий типу tzinfo невозможно, поскольку этот класс является абстрактным. Однако можно воспользоваться наследованием, создав собственный класс на основе tzinfo. При этом следует помнить, что для работы с такими объектами придется реализовать несколько абстрактных методов, к числу которых относятся utcoffset (смещение по местному времени с UTC), dst (настройка перехода на летнее время), а также функция tzname (имя часового пояса в виде строки).
from datetime import tzinfo, timedelta, datetime, timezone
class UTC0530(tzinfo):
def __init__(self, offset=19800, name=None):
self.offset = timedelta(seconds=offset)
self.name = name or self.__class__.__name__
def utcoffset(self, dt):
return self.offset
def tzname(self, dt):
return self.name
def dst(self, dt):
return timedelta(0)
a = datetime.now(timezone.utc)
print(a)
b = datetime.now(UTC0530())
print(b)
print(b.utcoffset())
print(b.tzname())
print(b.dst())
2022-04-09 11:00:11.889875+00:00
2022-04-09 16:30:11.890014+05:30
5:30:00
UTC0530
0:00:00
В приведенной программе демонстрируется создание пользовательского класса UTC0530, в котором описаны методы utcoffset, dst и tzname, а также применение нового типа с двумя объектами a и b. Таким образом, получается отображение времени со смещением +5:30.
Do'stlaringiz bilan baham: |