Работа с датой и временем в Python

19.04.2018

Теги: PythonWeb-разработкаМодуль

В 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 • Дата • Модуль • время • и

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.