Python Дата и время
Программы на Python могут обрабатывать даты и время многими способами, и преобразование форматов даты является распространённой функцией.
Python предоставляет модули time и calendar, которые можно использовать для форматирования дат и времени.
Временные интервалы — это числа с плавающей точкой в секундах.
Каждая временная метка выражается как количество времени, прошедшее с полуночи (эпохи) 1 января 1970 года.
Модуль time в Python имеет множество функций для преобразования распространённых форматов даты. Например, функция time.time() используется для получения текущей временной метки, как в следующем примере:
Примеры (Python 2.0+)
Вывод приведенного выше примера:
当前时间戳为: 1459994552.51
Единица временной метки лучше всего подходит для арифметики с датами. Однако даты до 1970 года нельзя представить таким образом. Даты слишком далеко в будущем также не будут работать, так как UNIX и Windows поддерживают только до 2038 года.
Что такое кортеж времени?
Многие функции Python обрабатывают время как кортеж из 9 групп чисел:
| Нет. | Поле | Значение |
|---|---|---|
| 0 | 4-значный год | 2008 |
| 1 | month | от 1 до 12 |
| 2 | day | от 1 до 31 |
| 3 | Час | от 0 до 23 |
| 4 | Минута | от 0 до 59 |
| 5 | second | от 0 до 61 (60 или 61 — високосные секунды) |
| 6 | День недели | от 0 до 6 (0 — понедельник) |
| 7 | День года | 1 до 366 (юлианский календарь) |
| 8 | Летнее время | -1, 0, 1; -1 — это флаг, определяющий, действует ли летнее время |
Выше приведён кортеж struct_time. Эта структура имеет следующие атрибуты:
| Нет. | Attribute | Значение |
|---|---|---|
| 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 (60 или 61 — високосные секунды) |
| 6 | tm_wday | от 0 до 6 (0 — понедельник) |
| 7 | tm_yday | 1 до 366 (юлианский календарь) |
| 8 | tm_isdst | -1, 0, 1; -1 — это флаг, определяющий, действует ли летнее время |
Получить текущее время
Чтобы преобразовать метку времени, выраженную числом с плавающей запятой, в кортеж времени, просто передайте число с плавающей запятой в такую функцию, как localtime.
Примеры (Python 2.0+)
Вывод приведенного выше примера:
本地时间为 : time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=3, tm_sec=27, tm_wday=3, tm_yday=98, tm_isdst=0)
Получить форматированное время
Вы можете выбирать различные форматы в соответствии с вашими потребностями, но простейшая функция для получения удобочитаемого формата времени — asctime():
Примеры (Python 2.0+)
Вывод приведенного выше примера:
本地时间为 : Thu Apr 7 10:05:21 2016
Формат даты
Мы можем использовать метод strftime модуля time для форматирования дат:
time.strftime(format[, t])
Демонстрация примера:
Примеры (Python 2.0+)
Вывод приведенного выше примера:
2016-04-07 10:25:09 Thu Apr 07 10:25:09 2016 1459175064.0
Символы форматирования даты и времени в Python:
- %y Двузначное представление года (00-99)
- %Y Четырёхзначное представление года (000-9999)
- %m Месяц (01-12)
- %d День месяца (0-31)
- %H Часы в 24-часовом формате (0-23)
- %I Часы в 12-часовом формате (01-12)
- %M Минута (00-59)
- %S Секунда (00-59)
- %a Сокращённое название дня недели для локали
- %A Полное название дня недели для локали
- %b Сокращённое название месяца для локали
- %B Полное название месяца для локали
- %c Соответствующее представление даты и времени для локали
- %j День года (001-366)
- %p Эквивалент A.M. или P.M. для локали
- %U Номер недели в году (00-53), воскресенье — первый день недели
- %w День недели (0-6), воскресенье — первый день недели
- %W Номер недели в году (00-53), понедельник — первый день недели
- %x Соответствующее представление даты для локали
- %X Соответствующее представление времени для локали
- %Z Название текущего часового пояса
- %% Сам символ %
Получить календарь на месяц
Модуль Calendar имеет широкий набор методов для работы с годовыми и месячными календарями, например, печать календаря на месяц:
Примеры (Python 2.0+)
Вывод приведенного выше примера:
以下输出2016年1月份的日历:
January 2016
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) к западу от Гринвича. Если регион находится к востоку от Гринвича, возвращается отрицательное значение (например, Западная Европа, включая Великобританию). Доступно только для регионов, где включено летнее время. |
| 2 | time.asctime([tupletime]) Принимает кортеж времени и возвращает читаемую 24-символьную строку в формате "Tue Dec 11 18:07:14 2008" (11 декабря 2008 года, вторник, 18:07:14). |
| 3 | time.clock( ) Возвращает текущее процессорное время в виде числа секунд с плавающей запятой. Используется для измерения затраченного времени различных программ, полезнее, чем time.time(). |
| 4 | time.ctime([secs]) Это эквивалентно asctime(localtime(secs)); если аргумент не указан, это эквивалентно asctime(). |
| 5 | time.gmtime([secs]) Принимает временную метку (секунды с плавающей запятой, прошедшие с начала эпохи 1970) и возвращает временной кортеж t по среднему времени по Гринвичу (GMT). Примечание: t.tm_isdst всегда равен 0. |
| 6 | time.localtime([secs]) Принимает временную метку (секунды с плавающей запятой, прошедшие с начала эпохи 1970) и возвращает временной кортеж t по местному времени (t.tm_isdst может быть 0 или 1, в зависимости от того, действует ли переход на летнее время локально в этот момент). |
| 7 | time.mktime(tupletime) Принимает временной кортеж и возвращает временную метку (секунды с плавающей запятой, прошедшие с начала эпохи 1970). |
| 8 | time.sleep(secs) Задерживает выполнение вызывающего потока, secs указано в секундах. |
| 9 | time.strftime(fmt[,tupletime]) Принимает кортеж времени и возвращает местное время в виде читаемой строки, формат определяется параметром fmt. |
| 10 | time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') Разбирает строку времени в кортеж времени в соответствии с форматом fmt. |
| 11 | time.time( ) Возвращает метку времени текущего момента (секунды с плавающей точкой, прошедшие с начала эпохи 1970 года). |
| 12 | time.tzset() Повторно инициализирует настройки, связанные со временем, на основе переменной окружения TZ. |
Модуль Time содержит следующие 2 очень важных атрибута:
| Нет. | Атрибут и описание |
|---|---|
| 1 | time.timezone Атрибут time.timezone — это смещение местного часового пояса (без учета перехода на летнее время) от Гринвича в секундах (>0, Америка; <=0, большая часть Европы, Азии, Африки). |
| 2 | time.tzname Атрибут time.tzname содержит пару строк, которые различаются в зависимости от ситуации, а именно название местного часового пояса с учетом летнего времени и без него. |
Модуль calendar
Все функции в этом модуле связаны с календарем, например вывод месячного календаря на основе символов для какого-либо месяца.
По умолчанию первый день недели — понедельник, а последний — воскресенье. Чтобы изменить настройку, нужно вызвать функцию calendar.setfirstweekday(). Модуль содержит следующие встроенные функции:
| Нет. | Функция и описание |
|---|---|
| 1 | calendar.calendar(year,w=2,l=1,c=6) Возвращает многострочный строковый формат для календаря на год (year), по 3 месяца в строке, разделенных расстоянием c. Ширина дневного интервала составляет w символов. Длина каждой строки равна 21* W+18+2* C. l — количество строк в неделе. |
| 2 | calendar.firstweekday( ) Возвращает настройку текущего первого дня недели. По умолчанию, когда модуль calendar впервые загружается, он возвращает 0, что соответствует понедельнику. |
| 3 | calendar.isleap(year) Возвращает True, если год високосный, иначе возвращает False. >>> import calendar >>> print(calendar.isleap(2000)) True >>> print(calendar.isleap(1900)) False |
| 4 | calendar.leapdays(y1,y2) Возвращает общее количество високосных лет между годами Y1 и Y2. |
| 5 | calendar.month(year,month,w=2,l=1) Возвращает многострочную строку календаря для года year и месяца month, с двухстрочным заголовком и одной строкой на неделю. Ширина ежедневного интервала — w символов. Длина каждой строки — 7*w+6. l — количество строк для каждой недели. |
| 6 | calendar.monthcalendar(year,month) Возвращает одноуровневый вложенный список целых чисел. Каждый подсписок содержит целые числа, представляющие неделю. Даты вне года year и месяца month устанавливаются в 0; дни в пределах диапазона представлены днём этого месяца, начиная с 1. |
| 7 | calendar.monthrange(year,month) Возвращает два целых числа. Первое — код дня недели для этого месяца, а второе — код даты этого месяца. Дни недели варьируются от 0 (понедельник) до 6 (воскресенье); месяцы — от 1 до 12. |
| 8 | calendar.prcal(year,w=2,l=1,c=6) Эквивалентноprint calendar.calendar(year,w=2,l=1,c=6)。 |
| 9 | calendar.prmonth(year,month,w=2,l=1) Эквивалентноprint calendar.month(year,month,w=2,l=1) 。 |
| 10 | calendar.setfirstweekday(weekday) Устанавливает код первого дня недели для каждой недели. От 0 (понедельник) до 6 (воскресенье). |
| 11 | calendar.timegm(tupletime) Обратная функция к time.gmtime: принимает кортеж времени и возвращает метку времени этого момента (секунды с плавающей запятой, прошедшие с эпохи 1970 года). |
| 12 | calendar.weekday(year,month,day) Возвращает код дня недели для указанной даты. От 0 (понедельник) до 6 (воскресенье). Месяцы — от 1 (январь) до 12 (декабрь). |
Другие связанные модули и функции
В Python другие модули для работы с датами и временем включают:
Другие расширения