Стандартная библиотека datetime стандартной библиотеки Python может использоваться для обработки дат и времени (даты, времени и времени). Методы strftime() и strptime(), которые преобразуют даты и время в строки и из строк, можно использовать для работы с датами и временем в различных форматах.
Он также может выполнять такие операции, как вычитание и сложение. Например, вы можете легко вычислить и получить дату 10 дней назад или 3 недели назад, или время через 50 минут.
Сначала мы опишем следующие классы объектов, доступных в модуле datetime.
datetime.datetime
:Дата и время (дата и время)datetime.date
:Датаdatetime.time
:Времяdatetime.timedelta
:Разница во времени и прошедшее время
Также объясняются методы strftime() и strptime(), которые преобразуют дату\время и строку друг в друга.
datetime
объектdatetime.now()
:Сегодняшняя дата, текущее времяdatetime
Конструктор объектов- Преобразование объекта времени даты в объект даты
date
объектdate.today()
:Сегодняшняя дата- Конструктор для объекта даты
time
объект- Конструктор для объекта времени
timedelta
объект- Вычитание объектов datetime и date для создания объектов timedelta.
- Конструктор для объекта timedelta
- Вычитание и сложение с использованием объектов timedelta
strftime()
:Преобразование даты и времени в строкуstrptime()
:Преобразование из строки в дату и время
Также в стандартную библиотеку включен модуль календаря, который генерирует календари в формате обычного текста или HTML.
объект времени
Объект datetime — это объект, содержащий информацию о дате (год, месяц, день) и времени (час, минута, секунда, микросекунда). Вы можете получить доступ к этой информации с помощью следующих атрибутов.
year
month
day
hour
minute
second
microsecond
datetime.now(): Сегодняшняя дата, текущее время
datetime.now() даст вам объект datetime с сегодняшней датой (текущей датой) и текущим временем.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
Конструктор для объекта datetime
Также можно генерировать объекты datetime для произвольных дат и времени.
Конструктор для объекта datetime выглядит следующим образом.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Следующие значения являются обязательными, остальные могут быть опущены. Если значение опущено, то по умолчанию оно равно 0.
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
Преобразование объекта времени даты в объект даты
Объект datetime может быть преобразован в объект date методом date(), как описано далее.
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
объект даты
Объект даты — это объект, содержащий информацию о дате (год, месяц, день). Доступ к нему можно получить по атрибутам year, month и day.
date.today(): Сегодняшняя дата
Объект даты текущей даты (сегодняшней даты) можно получить с помощью date.today().
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Конструктор для объекта даты
Конструктор для объекта даты выглядит следующим образом
date(year, month, day)
Все они являются обязательными и не могут быть пропущены.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
временной объект
Объект time — это объект, содержащий информацию о времени (часы, минуты, секунды и микросекунды). Доступ к нему можно получить с помощью атрибутов час, минута, секунда и микросекунда.
Конструктор для объекта времени
Конструктор объекта time выглядит следующим образом.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Все они являются необязательными, и если они опущены, то устанавливаются в 0.
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
объект timedelta
Объект timedelta — это объект, представляющий разницу во времени между двумя датами и временем, или прошедшее время. Он содержит информацию в днях, секундах и микросекундах, и доступ к нему можно получить с помощью атрибутов days, seconds и microseconds. Также можно получить общее количество секунд с помощью метода total_seconds().
Вычитание объектов datetime и date для создания объекта timedelta.
Вычитание объектов datetime друг из друга дает объект timedelta.
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
Вычитание объектов даты друг из друга аналогичным образом дает объект timedelta.
Конструктор для объекта timedelta
Конструктор объекта timedelta выглядит следующим образом
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Все они являются необязательными, и если они опущены, то устанавливаются в 0.
Обратите внимание, что объект timedelta содержит только следующую информацию.
- несколько дней:
days
- количество секунд:
seconds
- счётчик микросекунд:
microseconds
Например, следующие два равны
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Вычитание и сложение с использованием объектов timedelta
Объект timedelta можно использовать вместе с объектами datetime и date для выполнения таких операций, как вычитание и сложение. Например, вы можете легко вычислить и получить дату неделю назад или 10 дней спустя, или время через 50 минут.
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
Его также можно использовать для подсчета количества дней до определенной даты.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime(): Преобразование даты и времени в строку
Метод strftime() объектов datetime и date можно использовать для преобразования информации о дате и времени (дата и время) в строку в любом формате.
код форматирования
Доступные коды форматирования см. в официальной документации ниже.
Основные коды форматирования перечислены ниже.
%d
:День месяца в десятичной системе с нулевым заполнением.%m
:Месяц в десятичной системе с заполненным нулем.%y
:Последние две цифры года в десятичной системе с нулевым заполнением.%Y
:Четыре цифры года в десятичной системе с заполненным нулем.%H
:При выражении в десятичной системе с заполненным нулем (24-часовая система счисления)%I
:При выражении в десятичной системе с заполненным нулем (12-часовая система счисления)%M
:Для десятичной нотации с заполненным нулем.%S
:Секунды в десятичной системе с нулевым заполнением.%f
:Микросекунды (6 цифр) в десятичной системе с заполнением 0.%A
:Название дня недели для данной местности%a
:Название дня для данной местности (сокращенная форма)%B
:Название месяца локали%b
:Название месяца локали (сокращенная форма)%j
:День года в десятичной системе с нулевым заполнением.%U
:Номер недели года в десятичной системе счисления с нулевым заполнением (неделя начинается в воскресенье)%W
:Номер недели года в десятичной системе счисления с нулевым заполнением (неделя начинается в понедельник)
Следующие коды форматирования для названий дней и месяцев могут быть получены в виде различных строк в зависимости от локали.
%A
%a
%B
%b
Существует также специальный метод для строк формата ISO 8601.
Образец кода
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
Если вы хотите получить число вместо строки, просто преобразуйте его в целое число с помощью функции int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
В сочетании с объектом timedelta легко создать, например, список дат раз в две недели в любом формате.
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
Использование нотации понимания списка более разумно.
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- Похожие статьи:Использование нотации понимания списков в Python
strptime(): Преобразование из строки в дату и время
datetime strptime() можно использовать для создания объекта datetime из строки даты или времени. При этом необходимо указать строку форматирования, соответствующую исходной строке.
Существует также специальный метод для строк ISO 8601 (Python 3.7 или более поздняя версия).
Образец кода
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
Используя метод strftime() для полученного объекта datetime, вы можете представить дату и время в формате, отличном от исходной строки.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Если преобразовать его в объект datetime, можно также выполнять операции с объектами timedelta, поэтому, например, можно сгенерировать строку даты 10 дней назад в том же формате.
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22