Работа с датами и временем в Python: Практическое руководство
Что такое Tick (тик)
Интервалы времени — числа с плавающей точкой в секундах. Конкретные моменты времени выражаются в секундах, прошедших с 00:00:00 1 января 1970 года (эпоха).
Популярный модуль time предоставляет функции для работы со временем и преобразования представлений. Функция time.time() возвращает текущее системное время в тиках от эпохи.
Пример
Live Demo#!/usr/bin/python import time ticks = time.time() print "Number of ticks since 12:00am, January 1, 1970:", ticks
Результат (пример):
Number of ticks since 12:00am, January 1, 1970: 7186862.73399
Арифметика дат с тиками проста. Однако даты до эпохи так представить нельзя. Далекие будущие даты также ограничены — предел около 2038 года для UNIX и Windows.
Что такое TimeTuple (кортеж времени)
Многие функции модуля time работают со временем как с кортежем из 9 чисел:
| Индекс | Поле | Значения |
|---|---|---|
| 0 | 4-значный год | 2008 |
| 1 | Месяц | 1–12 |
| 2 | День | 1–31 |
| 3 | Час | 0–23 |
| 4 | Минута | 0–59 |
| 5 | Секунда | 0–61 (60,61 — високосные секунды) |
| 6 | День недели | 0–6 (0 — понедельник) |
| 7 | День года | 1–366 (Юлианский день) |
| 8 | Летнее время | -1, 0, 1 (-1 — библиотека определяет DST) |
Этот кортеж эквивалентен структуре struct_time с атрибутами:
| Индекс | Атрибут | Значения |
|---|---|---|
| 0 | tm_year | 2008 |
| 1 | tm_mon | 1–12 |
| 2 | tm_mday | 1–31 |
| 3 | tm_hour | 0–23 |
| 4 | tm_min | 0–59 |
| 5 | tm_sec | 0–61 |
| 6 | tm_wday | 0–6 (0 — понедельник) |
| 7 | tm_yday | 1–366 |
| 8 | tm_isdst | -1, 0, 1 |
Получение текущего времени
Для преобразования секунд от эпохи в time-tuple передайте значение в функцию (например, localtime):
Live Demo#!/usr/bin/python import time localtime = time.localtime(time.time()) print "Local current time :", localtime
Результат (пример):
Local current time : time.struct_time(tm_year=2013, tm_mon=7, tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)
Форматированное время
Простой способ получить читаемое время — asctime():
Live Demo#!/usr/bin/python import time localtime = time.asctime(time.localtime(time.time())) print "Local current time :", localtime
Результат:
Local current time : Tue Jan 13 10:17:09 2009
Календарь на месяц
Модуль calendar предоставляет методы для работы с годовыми и месячными календарями. Пример — календарь на январь 2008:
Live Demo#!/usr/bin/python import calendar cal = calendar.month(2008, 1) print "Here is the calendar:" print cal
Результат:
Here is the calendar:
January 2008
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Модуль time
Модуль time предоставляет функции для работы со временем и преобразования. Список методов:
| № | Функция и описание |
|---|---|
| 1 | time.altzone — смещение локального DST часового пояса в секундах к западу от UTC (отрицательное, если DST к востоку от UTC, как в Западной Европе). Использовать только если daylight ненулевое. |
| 2 | time.asctime([tupletime]) — принимает time-tuple, возвращает читаемую 24-символьную строку, напр. 'Tue Dec 11 18:07:14 2008'. |
| 3 | time.clock() — текущее CPU-время в секундах (float). Для измерения вычислительных затрат полезнее time.time(). |
| 4 | time.ctime([secs]) — как asctime(localtime(secs)); без аргументов как asctime(). |
| 5 | time.gmtime([secs]) — принимает секунды от эпохи, возвращает time-tuple с UTC (tm_isdst всегда 0). |
| 6 | time.localtime([secs]) — принимает секунды от эпохи, возвращает time-tuple с локальным временем (tm_isdst 0 или 1). |
| 7 | time.mktime(tupletime) — принимает time-tuple в локальном времени, возвращает секунды от эпохи (float). |
| 8 | time.sleep(secs) — приостанавливает вызывающий поток на secs секунд. |
| 9 | time.strftime(fmt[,tupletime]) — принимает time-tuple в локальном времени, возвращает строку по формату fmt. |
| 10 | time.strptime(str, fmt='%a %b %d %H:%M:%S %Y') — парсит строку по формату fmt, возвращает time-tuple. |
| 11 | time.time() — текущий момент времени, секунды от эпохи (float). |
| 12 | time.tzset() — сброс правил конвертации времени. Переменная окружения TZ определяет, как. |
Два важных атрибута модуля time:
| № | Атрибут и описание |
|---|---|
| 1 | time.timezone — смещение в секундах локального часового пояса (без DST) от UTC (>0 в Америке; ≤0 в Европе, Азии, Африке). |
| 2 | time.tzname — пара строк, зависящих от локали: имена часового пояса без и с DST соответственно. |
Модуль calendar
Модуль calendar предоставляет календарные функции, включая печать текстового календаря за месяц или год.
По умолчанию понедельник — первый день недели, воскресенье — последний. Изменить: calendar.setfirstweekday().
| № | Функция и описание |
|---|---|
| 1 | calendar.calendar(year,w=2,l=1,c=6) — многострочная строка с календарём года в три колонки, разделённые c пробелами. w — ширина даты в символах; длина строки 21*w+18+2*c. l — строк на неделю. |
| 2 | calendar.firstweekday() — текущий код дня недели, начинающей неделю. По умолчанию 0 (понедельник). |
| 3 | calendar.isleap(year) — True, если год високосный, иначе False. |
| 4 | calendar.leapdays(y1,y2) — общее число високосных дней в годах range(y1,y2). |
| 5 | calendar.month(year,month,w=2,l=1) — многострочная строка с календарём месяца, по одной строке на неделю плюс две заголовка. w — ширина даты; длина строки 7*w+6. l — строк на неделю. |
| 6 | calendar.monthcalendar(year,month) — список списков int. Каждый подсписок — неделя. Дни вне месяца = 0; дни месяца = их номера (1+). |
| 7 | calendar.monthrange(year,month) — два целых: код дня недели для 1-го числа месяца и число дней в месяце. Коды 0 (пн)–6 (вс); месяцы 1–12. |
| 8 | calendar.prcal(year,w=2,l=1,c=6) — как print calendar.calendar(...). |
| 9 | calendar.prmonth(year,month,w=2,l=1) — как print calendar.month(...). |
| 10 | calendar.setfirstweekday(weekday) — устанавливает первый день недели по коду weekday (0–6). |
| 11 | calendar.timegm(tupletime) — обратная к time.gmtime: принимает time-tuple, возвращает секунды от эпохи (float). |
| 12 | calendar.weekday(year,month,day) — код дня недели для даты. Коды 0–6; месяцы 1–12. |
Другие модули и функции
Если интересно, вот другие важные модули для работы с датой и временем:
- Модуль datetime
- Модуль pytz
- Модуль dateutil
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Словари в Python: создание, манипуляции и продвинутые техники
- Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
- Получение текущей даты и времени в Python: практическое руководство
- Python: получение текущего времени и работы с часовыми поясами
- Освоение модуля time в Python: функции, структуры и практические примеры
- Освоение Python time.sleep(): лучшие практики, многопоточность и реальные примеры