Работа с датой и временем в Python
19.04.2018
Теги: Python • Web-разработка • Модуль
В Python есть два модуля для работы с датой в временем: datetime
и time
.
Модуль datetime
Модуль datetime
содержит классы:
datetime.date
datetime.time
datetime.datetime
datetime.timedelta
Также существует класс tzinfo
, который применяется для работы с часовыми поясами.
Класс datetime.date
Класс datetime.date
принимает три аргумента: год, месяц и день.
>>> import datetime >>> date = datetime.date(2017, 4, 2) >>> date.year 2017 >>> date.month 4 >>> date.day 2
Давайте посмотрим, какой сейчас день:
>>> today = datetime.date.today() >>> today.year 2018 >>> today.month 4 >>> today.day 21
Класс datetime.datetime
Класс datetime.datetime
принимает аргументы: год, месяц, день, час, минута, секунда и микросекунда.
>>> date_time = datetime.datetime(2017, 4, 21, 13, 30, 10) >>> date_time.year 2017 >>> date_time.month 4 >>> date_time.day 21 >>> date_time.hour 13 >>> date_time.minute 30 >>> date_time.second 10
Давайте посмотрим, какое сейчас время:
>>> today = datetime.datetime.today() >>> today datetime.datetime(2018, 4, 21, 12, 43, 27, 786725) >>> today.hour 12 >>> today.minute 43
>>> datetime.datetime.now() # местное время datetime.datetime(2018, 4, 24, 13, 2, 39, 17479) >>> datetime.datetime.utcnow() # время по Гринвичу datetime.datetime(2018, 4, 24, 10, 2, 47, 46330)
Получить из объекта datetime
отдельно дату и отдельно время:
>>> today = datetime.datetime.today() >>> today datetime.datetime(2018, 4, 21, 13, 26, 54, 387462) >>> today.date() # отдельно дата datetime.date(2018, 4, 21) >>> today.time() # отдельно время datetime.time(13, 26, 54, 387462)
Классы datetime.date
и datetime.datetime
содержат метод strftime()
, который позволяет создавать строку, отображающую время в более понятной для человека форме.
>>> today = datetime.date.today().strftime("%d.%m.%Y") >>> today '21.04.2018'
>>> import locale >>> locale.setlocale(locale.LC_ALL, "ru") # задаем локаль для вывода даты на русском языке 'ru' >>> today = datetime.datetime.today().strftime("%A, %d.%m.%Y") >>> today 'суббота, 21.04.2018'
%a |
Сокращенное название дня недели |
%A |
Полное название дня недели |
%b |
Сокращенное название месяца |
%B |
Полное название месяца |
%c |
Дата и время |
%d |
День месяца [01,31] |
%H |
24-часовой формат часа [00,23] |
%I |
12-часовой формат часа [01,12] |
%j |
День года. Цифровой формат [001,366] |
%m |
Номер месяца. Цифровой формат [01,12] |
%M |
Минута. Цифровой формат [00,59] |
%p |
До полудня или после (AM или PM) |
%S |
Секунда. Цифровой формат [00,61] |
%U |
Номер недели в году. Цифровой формат [00,53] (с воскресенья) |
%w |
День недели. Цифровой формат [0(воскресенье), 6] |
%W |
Номер недели в году. Цифровой формат [00,53] (с понедельника) |
%x |
Дата |
%X |
Время |
%y |
Год без века. Цифровой формат [00,99] |
%Y |
Год с веком. Цифровой формат |
%Z |
Временная зона |
%% |
Знак процента |
Методы класса datetime
:
datetime.today()
— объектdatetime
из текущей даты и времени; работает также, как иdatetime.now()
со значениемtz=None
.datetime.now(tz=None)
— объектdatetime
из текущей даты и времени, местное время.datetime.utcnow()
— объектdatetime
из текущей даты и времени, по Гринвичу.datetime.fromtimestamp(timestamp)
— дата из стандартного представления времени.datetime.fromordinal(ordinal)
— дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.datetime.combine(date, time)
— объектdatetime
из комбинации объектовdate
иtime
.datetime.strptime(date_string, format)
— преобразует строку вdatetime
(так же, как и функцияstrptime
из модуляtime
).datetime.strftime(format)
— преобразует объектdatetime
в строку согласно формату.datetime.date()
— объект даты (с отсечением времени).datetime.time()
— объект времени (с отсечением даты).datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
— возвращает новый объектdatetime
с изменёнными атрибутами.datetime.timetuple()
— возвращаетstruct_time
изdatetime
.datetime.toordinal()
— количество дней, прошедших с 01.01.1970.datetime.timestamp()
— возвращает время в секундах с начала эпохи Unix.datetime.weekday()
— день недели в виде числа, понедельник — 0, воскресенье — 6.datetime.isoweekday()
— день недели в виде числа, понедельник — 1, воскресенье — 7.datetime.isocalendar()
— кортеж (год в формате ISO, ISO номер недели, ISO день недели).datetime.isoformat(sep='T')
— красивая строка видаYYYY-MM-DDTHH:MM:SS.mmmmmm
или, еслиmicrosecond == 0
,YYYY-MM-DDTHH:MM:SS
datetime.ctime()
— возвращает строковое представление текущего местного времени.
Класс datetime.timedelta
Класс datetime.timedelta
позволяет выполнять операции над датами — складывать, вычитать, сравнивать. Конструктор принимает именованные аргументы days
, weeks
, hours
, minutes
, seconds
, milliseconds
, microseconds
:
>>> delta = datetime.timedelta(days = 5, hours = 1, minutes = 1) >>> delta datetime.timedelta(5, 3660)
Интервал времени 5 дней, 1 час и 1 минута. Получить результат можно с помощью атрибутов days
, seconds
и microseconds
(5 дней и 3660 секунд):
>>> delta.days 5 >>> delta.seconds 3660
Получить результат в секундах позволяет метод total_seconds()
:
>>> today = datetime.datetime.today() # текущая дата >>> today datetime.datetime(2018, 4, 21, 15, 19, 2, 515432) >>> future = datetime.datetime(2019, 4, 21, 15, 19, 2, 515432) # дата на один год больше >>> delta = future - today >>> delta datetime.timedelta(365) >>> delta.total_seconds() # 365 дней в секундах 31536000.0
Прибавить к текущей дате 10 дней, 10 часов и 10 минут:
>>> today = datetime.datetime.today() >>> delta = datetime.timedelta(days = 10, hours = 10, minutes = 10) >>> future = today + delta >>> today # 21 апреля 2018 года, 15:29 datetime.datetime(2018, 4, 21, 15, 29, 29, 265954) >>> future # 2 мая 2018 года, 01:39 datetime.datetime(2018, 5, 2, 1, 39, 29, 265954)
Модуль time
Модуль основан на «эпохе Unix», которая началась 1 января 1970 года:
>>> import time >>> print(time.gmtime(0)) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
Функция time.time()
возвращает время в секундах по Гринвичу, начиная с эпохи Unix, как число с плавающей запятой:
>>> time.time() 1524561056.103065
Функция time.ctime([сек])
преобразует время, выраженное в секундах с начала эпохи Unix, в строку вида «Tue Apr 24 10:36:06 2018»:
>>> print(time.ctime()) Tue Apr 24 10:36:06 2018
Функция time.gmtime([сек])
возвращает время по Гринвичу как объект struct_time
>>> time.gmtime() time.struct_time(tm_year=2018, tm_mon=4, tm_mday=24, tm_hour=9, tm_min=6, tm_sec=29, tm_wday=1, tm_yday=114, tm_isdst=0)
Функция time.localtime([сек])
возвращает местное время (с учетом часового пояса) как объект struct_time
>>> time.localtime() time.struct_time(tm_year=2018, tm_mon=4, tm_mday=24, tm_hour=12, tm_min=6, tm_sec=51, tm_wday=1, tm_yday=114, tm_isdst=0)
Свойство time.altzone
показывает смещение часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно:
>>> time.altzone -14400
Функция time.sleep()
приостановливает выполнение скрипта на определенное количество секунд.
Свойства и методы класса time
time.altzone
— смещение часового пояса в секундах от нулевого меридиана.time.time()
— возвращает текущее время в секундах по Гринвичу, прошедшее с начала эпохи Unix.time.asctime([time_tuple])
— возвращает строкове представление переданной либо текущей даты.time.ctime([сек])
— возвращает строковое представление текущего местного времени.time.gmtime([сек])
— возвращает объектstruct_time
, текущего или переданного времени по Гринвичу.time.localtime([сек])
— возвращает объектstruct_time
, текущего или переданного времени. Представляющий местное время с начала эпохи Unix.time.mktime(time_tuple)
— преобразует кортеж или объектstruct_time
во время в секундах.time.sleep(сек)
— приостановить выполнение программы на заданное количество секунд.time.strftime(формат, [time_tuple])
— преобразует кортеж илиstruct_time
в строку по формату.
Дополнительно
Поиск: Python • Web-разработка • locale • Дата • Модуль • время • и