====== Дата и время ====== В Python дата и время обычно используется в следующих формах: * Модуль ''datetime'': * ''datatime'' — основной класс объектов времени. Объект ''datatime'' может быть по отношению к часовому поясу «naive» или «aware». * ''timedelta'' — класс интервала времени. * Модуль ''time'' — работа с временем в стиле Unix time_t (время выражается числом секунд с определенного момента, но имеет тип ''float'' — целая часть — число секунд, дробная — доли секунды). * Модуль ''calendar'' — функции календаря. * Модуль ''pytz''[pip] — данные по часовым поясам.
===== Дата и время (TZ naive) ===== from datetime import datetime, timedelta from time import time t1 = time() # t1 == 1509532912.9569173 t2 = datetime.now() # t2 == datetime.datetime(2017, 11, 1, 13, 42, 55, 774096) t3 = datetime.fromtimestamp(t1) # t3 == datetime.datetime(2017, 11, 1, 13, 44, 26, 259667) t4 = datetime(year=2011,month=2,day=3,hour=12,minute=22,second=34) # t4 == datetime.datetime(2011, 2, 3, 12, 22, 34) t5 = t4.timestamp() # t5 == 1296724954.0
===== Дата и время (UTC) ===== from datetime import datetime, timedelta import time t7 = datetime.utcnow() # t7 == datetime.datetime(2017, 11, 1, 11, 44, 5, 50212) t7.timestamp() # 1509525851.537214 t8 = time.time() + time.timezone # t8 == 1509525851.5553064 t9 = datetime.utcfromtimestamp(t8) # t9 == datetime.datetime(2017, 11, 1, 8, 44, 11, 555306)
===== Дата и время (TZ aware) ===== from datetime import datetime, timedelta import pytz t_msk = datetime.now(pytz.timezone('Europe/Moscow')) # t_msk == datetime.datetime(2017, 11, 1, 14, 52, 39, 297530, tzinfo=) t_ber = datetime.now(pytz.timezone('Europe/Berlin')) # t_ber == datetime.datetime(2017, 11, 1, 12, 52, 50, 681447, tzinfo=) (t_msk - t_ber).total_seconds() < 0.001 # True t_msk.astimezone(pytz.timezone('Europe/Berlin')) # datetime.datetime(2017, 11, 1, 12, 55, 21, 842909, tzinfo=) datetime.now().replace(tzinfo=pytz.timezone('Europe/Berlin')) # datetime.datetime(2017, 11, 1, 15, 0, 59, 63396, tzinfo=)
===== Работа с интервалами ===== Разность двух объектов ''datetime'' дает объект ''timedelta''. Также его можно сконструировать через конструктор ''timedelta''. ''timedelta'' можно складывать и вычитать, а также умножать на число. from datetime import datetime, timedelta from time import time t1 = datetime(year=2013,month=7,day=15,hour=12,minute=22,second=34) t2 = datetime.now() td = t2 - t1 #td == datetime.timedelta(1570, 6567, 748425) td.total_seconds() # 135654567.748425 t1 + timedelta(days=15) # datetime.datetime(2013, 7, 30, 12, 22, 34) timedelta(days=15) *2 # datetime.timedelta(30) Для модификации ''datetime'' к нему нужно или прибавить/отнять соответствующий ''timedelta'' или обновить конкретные поля методом ''replace''.
===== Даты и время и строки ===== Для приведения ''datetime'' к строке и разбора строки в ''datetime'' имеются функции ''strftime'' и ''strptime'' соответственно. from datetime import datetime t1 = datetime(year=2013,month=7,day=15,hour=12,minute=22,second=34) t1.strftime("%d.%m.%Y %H:%M:%S") # '15.07.2013 12:22:34' t2 = datetime.strptime('15.07.2013 12:22:34', "%d.%m.%Y %H:%M:%S") t2 == t1 # True Также в пакете ''python-dateutil''[pip] есть метод ''parse'' который автоматически угадывает формат. import dateutil.parser dateutil.parser.parse('15.07.2013 12:22:34') # datetime.datetime(2013, 7, 15, 12, 22, 34)
===== Некоторые популярные форматы ===== ^ Формат ^ Описание ^ format ^ Пример ^ | ''%d'' | День месяца | ''%02d'' | 01 | | ''%m'' | Месяц числом | ''%02d'' | 08 | | ''%y'' | Год (2 знака) | ''%02d'' | 05 | | ''%Y'' | Год (4 знака) | ''%04d'' | 2005 | | ''%H'' | Час | ''%02d'' | 08 | | ''%M'' | Минута | ''%02d'' | 05 | | ''%S'' | Секунда | ''%02d'' | 03 | | ''%j'' | День года | ''%d'' | 25 | [[https://docs.python.org/3/library/datetime.html?highlight=datetime#strftime-and-strptime-behavior|Подробное описание]] форматов даты и времени.
===== Разбор строк интервалов ===== Для разбора строк интервалов есть удобный пакет ''pytimeparse''[pip]. Он понимает такие форматы как "10m", "15s" и "2 days, 4:13:02" и возвращает время в секундах. from datetime import timedelta from pytimeparse.timeparse import timeparse timedelta(seconds=timeparse("10m")) # datetime.timedelta(0, 600) timedelta(seconds=timeparse("15s")) # datetime.timedelta(0, 15) timedelta(seconds=timeparse("2 days, 4:13:02")) # datetime.timedelta(2, 15182)
===== Метод sleep ===== Метод ''time.sleep'' выполняет приостановку выполнения скрипта на заданное время в секундах и их долях. import time time.sleep(3) time.sleep(0.23)