Дата и время в Python
В Python для описания даты и времени используется 3 разных объекта:
- date для хранения даты “25 декабря 2018г.”
- time для времени без даты
- datetime для времени с датой “25 декабря 2018г., 21:01:54”
Все объекты живут в модуле datetime :
import datetime print(datetime.datetime.now()) print(datetime.date.today())
В модуле datetime есть отдельный объект timezone для хранения часового пояса: UTC, UTC+3h, UTC-8 и другие. Объекты time и datetime могут хранить время с учетом часового пояса или без.
Работать с часовыми поясами сложно: приходится учитывать летнее и зимнее время, следить за изменениями в законодательстве разных стран. В Python для этих целей есть популярная библиотека pytz. Она поставляется со своей базой данных и регулярно обновляется.
Чтобы избежать работы с часовыми поясами используют Unix Timestamp. Это число с количеством секунд, прошедших с полуночи 1 января 1970 года по UTC. Timestamp не зависит от часового пояса и выражается одним числом 1546704810.414488 . Такой формат удобен при передаче и хранении данных, но непонятен человеку.
Все форматы даты и времени можно конвертировать один в другой. Это не тривиально, но спасает StackOverflow.
Примеры работы с датой и временем
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Модуль time

time.altzone — смещение DST часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно.
time.asctime([t]) — преобразовывает кортеж или struct_time в строку вида «Thu Sep 27 16:42:37 2012». Если аргумент не указан, используется текущее время.
time.clock() — в Unix, возвращает текущее время. В Windows, возвращает время, прошедшее с момента первого вызова данной функции.
time.ctime([сек]) — преобразует время, выраженное в секундах с начала эпохи в строку вида «Thu Sep 27 16:42:37 2012».
time.daylight — не 0, если определено, зимнее время или летнее (DST).
time.gmtime([сек]) — преобразует время, выраженное в секундах с начала эпохи в struct_time, где DST флаг всегда равен нулю.
time.localtime([сек]) — как gmtime, но с DST флагом.
time.mktime(t) — преобразует кортеж или struct_time в число секунд с начала эпохи. Обратна функции time.localtime.
time.sleep(сек) — приостановить выполнение программы на заданное количество секунд.
time.strftime(формат, [t]) — преобразует кортеж или struct_time в строку по формату:
| Формат | Значение |
|---|---|
| %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 | До полудня или после (при 12-часовом формате) |
| %S | Число секунд [00,61] |
| %U | Номер недели в году (нулевая неделя начинается с воскресенья) [00,53] |
| %w | Номер дня недели [0(Sunday),6] |
| %W | Номер недели в году (нулевая неделя начинается с понедельника) [00,53] |
| %x | Дата |
| %X | Время |
| %y | Год без века [00,99] |
| %Y | Год с веком |
| %Z | Временная зона |
| %% | Знак ‘%’ |
time.strptime(строка [, формат]) — разбор строки, представляющей время в соответствии с форматом. Возвращаемое значение struct_time. Формат по умолчанию: «%a %b %d %H:%M:%S %Y».
Класс time.struct_time — тип последовательности значения времени. Имеет интерфейс кортежа. Можно обращаться по индексу или по имени.
- tm_year
- tm_mon
- tm_mday
- tm_hour
- tm_min
- tm_sec
- tm_wday
- tm_yday
- tm_isdst
time.time() — время, выраженное в секундах с начала эпохи.
time.timezone — смещение местного часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно.
time.tzname — кортеж из двух строк: первая — имя DST часового пояса, второй — имя местного часового пояса.
Для вставки кода на Python в комментарий заключайте его в теги
Работа с датами и временем
Основной функционал для работы с датами и временем сосредоточен в модуле datetime в виде следующих классов:
Класс date
Для работы с датами воспользуемся классом date , который определен в модуле datetime. Для создания объекта date мы можем использовать конструктор date, который последовательно принимает три параметра: год, месяц и день.
date(year, month, day)
Например, создадим какую-либо дату:
import datetime yesterday = datetime.date(2017,5, 2) print(yesterday) # 2017-05-02
Если необходимо получить текущую дату, то можно воспользоваться методом today() :
from datetime import date today = date.today() print(today) # 2017-05-03 print("<>.<>.<>".format(today.day, today.month, today.year)) # 2.5.2017
С помощью свойств day, month, year можно получить соответственно день, месяц и год
Класс time
За работу с временем отвечает класс time . Используя его конструктор, можно создать объект времени:
time([hour] [, min] [, sec] [, microsec])
Конструктор последовательно принимает часы, минуты, секунды и микросекунды. Все параметры необязательные, и если мы какой-то параметр не передадим, то соответствующее значение будет инициализироваться нулем.
from datetime import time current_time = time() print(current_time) # 00:00:00 current_time = time(16, 25) print(current_time) # 16:25:00 current_time = time(16, 25, 45) print(current_time) # 16:25:45
Класс datetime
Класс datetime из одноименного модуля объединяет возможности работы с датой и временем. Для создания объекта datetime можно использовать следующий конструктор:
datetime(year, month, day [, hour] [, min] [, sec] [, microsec])
Первые три параметра, представляющие год, месяц и день, являются обязательными. Остальные необязательные, и если мы не укажем для них значения, то по умолчанию они инициализируются нулем.
from datetime import datetime deadline = datetime(2017, 5, 10) print(deadline) # 2017-05-10 00:00:00 deadline = datetime(2017, 5, 10, 4, 30) print(deadline) # 2017-05-10 04:30:00
Для получения текущих даты и времени можно вызвать метод now() :
from datetime import datetime now = datetime.now() print(now) # 2017-05-03 11:18:56.239443 print("<>.<>.<> <>:<>".format(now.day, now.month, now.year, now.hour, now.minute)) # 3.5.2017 11:21 print(now.date()) print(now.time())
С помощью свойств day, month, year, hour, minute, second можно получить отдельные значения даты и времени. А через методы date() и time() можно получить отдельно дату и время соответственно.
Преобразование из строки в дату
Из функциональности класса datetime следует отметить метод strptime() , который позволяет распарсить строку и преобразовать ее в дату. Этот метод принимает два параметра:
strptime(str, format)
Первый параметр str представляет строковое определение даты и времени, а второй параметр - формат, который определяет, как различные части даты и времени расположены в этой строке.
Для определения формата мы можем использовать следующие коды:
- %d : день месяца в виде числа
- %m : порядковый номер месяца
- %y : год в виде 2-х чисел
- %Y : год в виде 4-х чисел
- %H : час в 24-х часовом формате
- %M : минута
- %S : секунда
Применим различные форматы:
from datetime import datetime deadline = datetime.strptime("22/05/2017", "%d/%m/%Y") print(deadline) # 2017-05-22 00:00:00 deadline = datetime.strptime("22/05/2017 12:30", "%d/%m/%Y %H:%M") print(deadline) # 2017-05-22 12:30:00 deadline = datetime.strptime("05-22-2017 12:30", "%m-%d-%Y %H:%M") print(deadline) # 2017-05-22 12:30:00
Функция time() модуля time в Python
Функция time() модуля time вернет время в секундах с начала эпохи как число с плавающей запятой.
Конкретная дата эпохи и обработка високосных секунд зависит от платформы. В Windows и большинстве систем Unix периодом времени является 1 января 1970 года, 00:00:00 (UTC), и високосные секунды не учитываются во времени с начала эпохи. Это обычно называют временем Unix.
Чтобы узнать, какова эпоха на данной платформе, посмотрите на time.gmtime(0) .
Обратите внимание, что, хотя время всегда возвращается как число float , не все системы предоставляют время с большей точностью, чем 1 секунда. Хотя эта функция обычно возвращает неубывающие значения, она может возвращать меньшее значение, чем предыдущий вызов, если системные часы были переведены назад между двумя вызовами.
Число, возвращаемое функцией time.time() , можно преобразовать в более распространенный формат времени (год, месяц, день, час и т. д.) в UTC, передав его в функцию time.gmtime() или по местному времени, передав его функции time.localtime() . В обоих случаях возвращается объект time.struct_time , из которого компоненты календарной даты могут быть доступны как атрибуты.
Функция time.time_ns() работает аналогично time.time() , но возвращает время как целое число наносекунд с начала эпохи.Работает не на всех платформах.
Примеры использования:
>>> import time >>> sec = time.time() >>> sec # 1587806227.4762378 >>> struct = time.localtime(sec) >>> time.strftime('%d.%m.%Y %H:%M', struct) # '25.04.2020 12:31'
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Функция asctime() модуля time
- Функция ctime() модуля time
- Функция get_clock_info() модуля time
- Функция gmtime() модуля time
- Функция localtime() модуля time
- Функция mktime() модуля time
- Функция monotonic() модуля time
- Функция perf_counter() модуля time
- Функция process_time() модуля time
- Функция sleep() модуля time
- Функция strftime() модуля time
- Функция strptime() модуля time
- Класс struct_time модуля time
- Функция time() модуля time
- Функция tzset() модуля time
- Константы часового пояса модуля time