Python Дата и время

Программы на Python могут обрабатывать даты и время многими способами, и преобразование форматов даты является распространённой функцией.

Python предоставляет модули time и calendar, которые можно использовать для форматирования дат и времени.

Временные интервалы — это числа с плавающей точкой в секундах.

Каждая временная метка выражается как количество времени, прошедшее с полуночи (эпохи) 1 января 1970 года.

Модуль time в Python имеет множество функций для преобразования распространённых форматов даты. Например, функция time.time() используется для получения текущей временной метки, как в следующем примере:

Примеры (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # Импорт модуля time ticks = time.time() print "Текущая временная метка:", ticks

Вывод приведенного выше примера:

当前时间戳为: 1459994552.51

Единица временной метки лучше всего подходит для арифметики с датами. Однако даты до 1970 года нельзя представить таким образом. Даты слишком далеко в будущем также не будут работать, так как UNIX и Windows поддерживают только до 2038 года.



Что такое кортеж времени?

Многие функции Python обрабатывают время как кортеж из 9 групп чисел:

Нет.ПолеЗначение
04-значный год2008
1monthот 1 до 12
2dayот 1 до 31
3Часот 0 до 23
4Минутаот 0 до 59
5secondот 0 до 61 (60 или 61 — високосные секунды)
6День неделиот 0 до 6 (0 — понедельник)
7День года1 до 366 (юлианский календарь)
8Летнее время-1, 0, 1; -1 — это флаг, определяющий, действует ли летнее время

Выше приведён кортеж struct_time. Эта структура имеет следующие атрибуты:

Нет.AttributeЗначение
0tm_year2008
1tm_monот 1 до 12
2tm_mdayот 1 до 31
3tm_hourот 0 до 23
4tm_minот 0 до 59
5tm_secот 0 до 61 (60 или 61 — високосные секунды)
6tm_wdayот 0 до 6 (0 — понедельник)
7tm_yday1 до 366 (юлианский календарь)
8tm_isdst-1, 0, 1; -1 — это флаг, определяющий, действует ли летнее время


Получить текущее время

Чтобы преобразовать метку времени, выраженную числом с плавающей запятой, в кортеж времени, просто передайте число с плавающей запятой в такую функцию, как localtime.

Примеры (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.localtime(time.time()) print "Местное время:", localtime

Вывод приведенного выше примера:

本地时间为 : 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+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.asctime( time.localtime(time.time()) ) print "Местное время:", localtime

Вывод приведенного выше примера:

本地时间为 : Thu Apr  7 10:05:21 2016

Формат даты

Мы можем использовать метод strftime модуля time для форматирования дат:

time.strftime(format[, t])

Демонстрация примера:

Примеры (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # Форматировать как 2016-03-20 11:45:39 print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # Форматировать как Sat Mar 28 22:24:24 2016 print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) # Преобразовать строку формата в метку времени a = "Sat Mar 28 22:24:24 2016" print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))

Вывод приведенного выше примера:

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+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import calendar cal = calendar.month(2016, 1) print "Следующий код выводит календарь на январь 2016 года:" print cal

Вывод приведенного выше примера:

以下输出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 содержит следующие встроенные функции как для обработки времени, так и для преобразования форматов времени:

Нет.Функция и описание
1time.altzone
Возвращает смещение в секундах для региона летнего времени (DST) к западу от Гринвича. Если регион находится к востоку от Гринвича, возвращается отрицательное значение (например, Западная Европа, включая Великобританию). Доступно только для регионов, где включено летнее время.
2time.asctime([tupletime])
Принимает кортеж времени и возвращает читаемую 24-символьную строку в формате "Tue Dec 11 18:07:14 2008" (11 декабря 2008 года, вторник, 18:07:14).
3time.clock( )
Возвращает текущее процессорное время в виде числа секунд с плавающей запятой. Используется для измерения затраченного времени различных программ, полезнее, чем time.time().
4time.ctime([secs])
Это эквивалентно asctime(localtime(secs)); если аргумент не указан, это эквивалентно asctime().
5time.gmtime([secs])
Принимает временную метку (секунды с плавающей запятой, прошедшие с начала эпохи 1970) и возвращает временной кортеж t по среднему времени по Гринвичу (GMT). Примечание: t.tm_isdst всегда равен 0.
6time.localtime([secs])
Принимает временную метку (секунды с плавающей запятой, прошедшие с начала эпохи 1970) и возвращает временной кортеж t по местному времени (t.tm_isdst может быть 0 или 1, в зависимости от того, действует ли переход на летнее время локально в этот момент).
7time.mktime(tupletime)
Принимает временной кортеж и возвращает временную метку (секунды с плавающей запятой, прошедшие с начала эпохи 1970).
8time.sleep(secs)
Задерживает выполнение вызывающего потока, secs указано в секундах.
9time.strftime(fmt[,tupletime])
Принимает кортеж времени и возвращает местное время в виде читаемой строки, формат определяется параметром fmt.
10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
Разбирает строку времени в кортеж времени в соответствии с форматом fmt.
11time.time( )
Возвращает метку времени текущего момента (секунды с плавающей точкой, прошедшие с начала эпохи 1970 года).
12time.tzset()
Повторно инициализирует настройки, связанные со временем, на основе переменной окружения TZ.

Модуль Time содержит следующие 2 очень важных атрибута:

Нет.Атрибут и описание
1time.timezone
Атрибут time.timezone — это смещение местного часового пояса (без учета перехода на летнее время) от Гринвича в секундах (>0, Америка; <=0, большая часть Европы, Азии, Африки).
2time.tzname
Атрибут time.tzname содержит пару строк, которые различаются в зависимости от ситуации, а именно название местного часового пояса с учетом летнего времени и без него.


Модуль calendar

Все функции в этом модуле связаны с календарем, например вывод месячного календаря на основе символов для какого-либо месяца.

По умолчанию первый день недели — понедельник, а последний — воскресенье. Чтобы изменить настройку, нужно вызвать функцию calendar.setfirstweekday(). Модуль содержит следующие встроенные функции:

Нет.Функция и описание
1calendar.calendar(year,w=2,l=1,c=6)
Возвращает многострочный строковый формат для календаря на год (year), по 3 месяца в строке, разделенных расстоянием c. Ширина дневного интервала составляет w символов. Длина каждой строки равна 21* W+18+2* C. l — количество строк в неделе.
2calendar.firstweekday( )
Возвращает настройку текущего первого дня недели. По умолчанию, когда модуль calendar впервые загружается, он возвращает 0, что соответствует понедельнику.
3calendar.isleap(year)

Возвращает True, если год високосный, иначе возвращает False.

>>> import calendar
>>> print(calendar.isleap(2000))
True
>>> print(calendar.isleap(1900))
False
4calendar.leapdays(y1,y2)
Возвращает общее количество високосных лет между годами Y1 и Y2.
5calendar.month(year,month,w=2,l=1)
Возвращает многострочную строку календаря для года year и месяца month, с двухстрочным заголовком и одной строкой на неделю. Ширина ежедневного интервала — w символов. Длина каждой строки — 7*w+6. l — количество строк для каждой недели.
6calendar.monthcalendar(year,month)
Возвращает одноуровневый вложенный список целых чисел. Каждый подсписок содержит целые числа, представляющие неделю. Даты вне года year и месяца month устанавливаются в 0; дни в пределах диапазона представлены днём этого месяца, начиная с 1.
7calendar.monthrange(year,month)
Возвращает два целых числа. Первое — код дня недели для этого месяца, а второе — код даты этого месяца. Дни недели варьируются от 0 (понедельник) до 6 (воскресенье); месяцы — от 1 до 12.
8calendar.prcal(year,w=2,l=1,c=6)
Эквивалентноprint calendar.calendar(year,w=2,l=1,c=6)。
9calendar.prmonth(year,month,w=2,l=1)
Эквивалентноprint calendar.month(year,month,w=2,l=1) 。
10calendar.setfirstweekday(weekday)
Устанавливает код первого дня недели для каждой недели. От 0 (понедельник) до 6 (воскресенье).
11calendar.timegm(tupletime)
Обратная функция к time.gmtime: принимает кортеж времени и возвращает метку времени этого момента (секунды с плавающей запятой, прошедшие с эпохи 1970 года).
12calendar.weekday(year,month,day)
Возвращает код дня недели для указанной даты. От 0 (понедельник) до 6 (воскресенье). Месяцы — от 1 (январь) до 12 (декабрь).


Другие связанные модули и функции

В Python другие модули для работы с датами и временем включают:

Другие расширения