Datetime
Библиотечка на python для синтаксического анализа значений даты и времени
Для представления значений времени используется класс time
, доступ к данным времени можно получить по атрибутам. Экземпляр класса хранит только время и его разрещшающая способность ограничена микросекундами.
>>> import datetime
>>> t = datetime.time(1, 2, 3)
>>> print(t)
01:02:03
>>> print(t.hour)
1
>>> print(t.minute)
2
>>> print(t.second)
3
>>> print(t.microsecond)
0
>>> print(t.tzinfo)
None
Даты можно извлекать через класс date
используя похожий апи. Метод today()
создает экземпляр текущей даты. Разрешающая способность - сутки.
>>> import datetime
>>> today = datetime.date.today()
>>> tt = today.timetuple()
>>> print(tt.tm_year)
>>> print(tt.tm_mon)
>>> print(tt.tm_mday)
>>> print(tt.tm_hour)
>>> print(tt.tm_min)
>>> print(tt.tm_sec)
>>> print(tt.tm_wday)
>>> print(tt.tm_yday)
>>> print(tt.tm_isdst)
Кроме того, экземпляр даты можно получить из существующей даты с помощью метода replace()
timedelta()
позволяет получить нужный промежуток времени, с которым можно осуществлять базовый арифметические операции и сравнение. У timedelta свой апи доступа к значениям. полную длительность в секундах можно получить из объекта timedelta с помощью ёещефд_ыусщтвы()ё
>>> import datetime
>>> print(datetime.timedelta(microseconds=1))
>>> print(datetime.timedelta(milliseconds=1))
>>> print(datetime.timedelta(seconds=1))
>>> print(datetime.timedelta(minutes=1))
>>> print(datetime.timedelta(hours=1))
>>> print(datetime.timedelta(days=1))
>>> print(datetime.timedelta(weeks=1))
Класс datetime предоставляет методы fromordinal()
и fromtimestamp()
, позволяющие конвертировать представление даты и времени. combine()
позволяет скомбинировать экземлпяр datetime из экземпляров date и time
>>> import datetime
>>> t = datetime.time(1, 2, 3)
>>> print('t :', t)
t : 01:02:03
>>> d = datetime.date.today()
>>> print('d :', d)
d : 2021-12-05
>>> dt = datetime.datetime.combine(d, t)
>>> print('dt:', dt)
dt: 2021-12-05 01:02:03
Форматирование так-же доступно через функции strftime()
и strptime()
. Все доступные форматы тут
Частовые пояа представлены абстрактным классом tzinfo
- необходимо определить сабкласс и предоставить ему реализации методов. В datetime представляена тривиальная реализация в виде сабкласса timezone
с использованием фиксированного смещения относительно UTC
>>> import datetime
>>> min6 = datetime.timezone(datetime.timedelta(hours=-6))
>>> plus6 = datetime.timezone(datetime.timedelta(hours=6))
>>> d = datetime.datetime.now(min6)
astimezone()
обеспечивает преобразование одного часового пояса в другой.
>>> z = d.astimezone(plus6)
Как получимть текущее время
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)
>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150
или просто время
>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)
>>> print(datetime.datetime.now().time())
15:08:24.789150
Мне показался полезным этот вариант:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
Или так
>>> from datetime import datetime
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Если надо представить разницу во времени в человекочитаемом виде, то можно так:
>>> import datetime
>>> a = datetime.datetime.now()
>>> # ...wait a while...
>>> b = datetime.datetime.now()
>>> print(b-a)
0:03:43.984000
или, если не нужны микросекунды
>>> a = datetime.datetime.now().replace(microsecond=0)
>>> b = datetime.datetime.now().replace(microsecond=0)
>>> print(b-a)
0:03:43
Еще материалы:
- [2021-04-02-daily-note] - внизу заметки про то, как посчитать определенный день недели
- [декоратор-wait-для-behave]
- [time]
- [calendar]
- [dateutil]
- [pytz]