В этой статье мы разберемся, как работать с датой и временем в Python при помощи модуля datetime. И для начала давайте напишем несколько простых программ, связанных с датой и временем.
Пример 1: Получение текущей даты и времени.
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
Когда вы запустите программу, результат будет примерно таким:
2020-06-29 20:30:33.139533
В этом примере мы импортировали модуль datetime с помощью оператора import datetime
.
Одним из классов, определенных в модуле datetime, является класс datetime
. После импортирования модуля мы использовали метод now()
для создания объекта datetime
, содержащего текущие локальные дату и время.
Пример 2: Получение текущей даты.
import datetime date_object = datetime.date.today() print(date_object)
Когда вы запустите программу, результат будет примерно таким:
2020-06-29
В этой программе мы использовали метод today()
, определенный в классе date
, чтобы получить объект date
, содержащий текущую локальную дату.
Мы можем использовать функцию dir()
для получения списка, содержащего все атрибуты модуля datetime.
import datetime print(dir(datetime))
Когда вы запустите программу, вывод будет следующим:
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
Наиболее часто используемыми классами в модуле datetime являются:
date
time
datetime
timedelta
Объект date
представляет дату (год, месяц и день).
Пример 3: объект date для представления даты.
import datetime d = datetime.date(2020, 6, 29) print(d)
Когда вы запустите программу, вывод будет следующим:
2020-06-29
В приведенном выше примере date()
является конструктором класса date
. Конструктор принимает три аргумента: год, месяц и день.
Переменная d
— это объект date
.
Вы можете создавать объекты класса date
, предварительно импортировав модуль datetime, а можете импортировать только класс date
из модуля datetime. Вот как это делается:
from datetime import date a = date(2020, 6, 29) print(a) # 2020-06-29
Пример 4: Получение текущей даты.
Для получения информации о текущей дате можно воспользоваться методом today()
.
from datetime import date today = date.today() print("Current date =", today)
Когда вы запустите программу, вывод будет следующим:
Current date = 2020-06-29
Пример 5: получение даты из метки времени (timestamp).
Мы также можем создавать объекты date
из метки времени (timestamp). Термин timestamp употребляется для обозначения POSIX-времени — количества секунд, прошедшего с 00:00:00 UTC 1 января, 1970 года. Вы можете преобразовать метку времени в дату при помощи метода fromtimestamp()
.
from datetime import date timestamp = date.fromtimestamp(1326244364) print("Date =", timestamp)
Когда вы запустите программу, вывод будет следующим:
Date = 2012-01-11
Пример 6: вывод текущего года, месяца и дня.
Мы легко можем получить год, месяц, день, день недели и т. д. из объекта date
. Вот как это делается:
from datetime import date today = date.today() print("Current year:", today.year) print("Current month:", today.month) print("Current day:", today.day)
Когда вы запустите программу, результат будет примерно таким:
Current year: 2020
Current month: 6
Current day: 29
Экземпляр класса time
представляет собой время (часы, минуты, секунды и микросекунды).
Пример 7: объект time для представления времени.
from datetime import time # time(hour = 0, minute = 0, second = 0) a = time() print("a =", a) # time(hour, minute and second) b = time(11, 34, 56) print("b =", b) # time(hour, minute and second) c = time(hour = 11, minute = 34, second = 56) print("c =", c) # time(hour, minute, second, microsecond) d = time(11, 34, 56, 234566) print("d =", d)
Когда вы запустите программу, вывод будет следующим:
a = 00:00:00
b = 11:34:56
c = 11:34:56
d = 11:34:56.234566
Пример 8: вывод часов, минут, секунд и микросекунд.
После того как вы создадите объект time
, вы можете легко получить его атрибуты, такие как часы, минуты и т. д.
from datetime import time a = time(11, 34, 56) print("hour =", a.hour) print("minute =", a.minute) print("second =", a.second) print("microsecond =", a.microsecond)
Когда вы запустите программу, вывод будет следующим:
hour = 11
minute = 34
second = 56
microsecond = 0
Обратите внимание, что мы не передали аргумент microsecond
. Следовательно, его значение по умолчанию будет равно 0.
Экземпляр класса datetime
содержит информацию как о дате, так и о времени.
Пример 9: объект datetime.
from datetime import datetime #datetime(year, month, day) a = datetime(2018, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2017, 11, 28, 23, 55, 59, 342380) print(b)
Когда вы запустите программу, вывод будет следующим:
2018-11-28 00:00:00
2017-11-28 23:55:59.342380
Первые три аргумента year
, month
и day
в конструкторе datetime()
являются обязательными. Отсутствующие данные будут заполнены нулями по умолчанию.
Пример 10: вывод года, месяца, часа, минуты и метки времени.
from datetime import datetime a = datetime(2017, 11, 28, 23, 55, 59, 342380) print("year =", a.year) print("month =", a.month) print("hour =", a.hour) print("minute =", a.minute) print("timestamp =", a.timestamp())
Когда вы запустите программу, вывод будет следующим:
year = 2017
month = 11
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238
Пример 11: получение текущего момента времени.
Мы можем получить информацию о текущем моменте времени не только с помощью уже упомянутого метода now()
, но и с помощью today()
.
from datetime import datetime date = datetime.today() print(date) date = datetime.now() print(date)
Когда вы запустите программу, результат будет примерно таким:
2020-06-29 20:35:33.353184
2020-06-29 20:35:33.356184
Объект timedelta
представляет разницу между двумя моментами времени.
Пример 12: разница между двумя моментами времени.
from datetime import datetime, date t1 = date(year = 2018, month = 7, day = 12) t2 = date(year = 2017, month = 12, day = 23) t3 = t1 - t2 print("t3 =", t3) t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33) t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13) t6 = t4 - t5 print("t6 =", t6) print("type of t3 =", type(t3)) print("type of t6 =", type(t6))
Когда вы запустите программу, вывод будет следующим:
t3 = 201 days, 0:00:00
t6 = -333 days, 1:14:20
type of t3 = <class 'datetime.timedelta'>
type of t6 = <class 'datetime.timedelta'>
Обратите внимание, что и t3
, и t6
имеют тип <class 'datetime.timedelta'>
.
Пример 13: разница между двумя объектами timedelta.
from datetime import timedelta t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33) t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54) t3 = t1 - t2 print("t3 =", t3)
Когда вы запустите программу, вывод будет следующим:
t3 = 14 days, 13:55:39
Здесь мы создали два объекта timedelta
— t1
и t2
, и их разница выводится на экран.
Пример 14: отрицательный объект timedelta.
from datetime import timedelta t1 = timedelta(seconds = 33) t2 = timedelta(seconds = 54) t3 = t1 - t2 print("t3 =", t3) print("t3 =", abs(t3))
Когда вы запустите программу, вывод будет следующим:
t3 = -1 day, 23:59:39
t3 = 0:00:21
Пример 15: интервал времени в секундах.
Вы можете получить общее количество секунд объекта timedelta
, используя метод total_seconds()
.
from datetime import timedelta t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423) print("total seconds =", t.total_seconds())
Когда вы запустите программу, вывод будет следующим:
total seconds = 435633.233423
Вы также можете найти сумму двух моментов времени, используя оператор +
. Кроме того, вы можете умножить и разделить объект timedelta
на целые числа и числа с плавающей точкой.
Больше информации о timedelta
вы можете найти в документации.
Представление даты и времени может отличатся в разных странах, организациях и т. д. В США, например, чаще всего используется формат «мм/дд/гггг», тогда как в Великобритании более распространен формат «дд/мм/гггг».
В Python для работы с форматами есть методы strftime()
и strptime()
.
Метод strftime()
определен в классах date
, datetime
и time
. Он создает форматированную строку из заданного объекта date
, datetime
или time
.
Пример 16: форматирование даты с использованием метода strftime().
from datetime import datetime now = datetime.now() t = now.strftime("%H:%M:%S") print("time:", t) s1 = now.strftime("%m/%d/%Y, %H:%M:%S") # mm/dd/YY H:M:S format print("s1:", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S") # dd/mm/YY H:M:S format print("s2:", s2)
Когда вы запустите программу, результат будет примерно таким:
time: 20:43:57
s1: 06/29/2020, 20:43:57
s2: 29/06/2020, 20:43:57
Здесь %Y
, %m
, %d
, %H
и т. д. — коды для определения формата. Метод strftime()
принимает один или несколько кодов и возвращает отформатированную строку на его основе.
В приведенной выше программе переменные t
, s1
и s2
являются строками.
Основные коды для определения формата:
%Y
— год [0001, …, 2018, 2019, …, 9999]%m
— месяц [01, 02, …, 11, 12]%d
— день [01, 02, …, 30, 31]%H
— час [00, 01, …, 22, 23]%M
— минута [00, 01, …, 58, 59]%S
— секунда [00, 01, …, 58, 59]Чтобы узнать больше о методе strftime()
и кодах форматирования, перейдите по ссылке.
Метод strptime()
создает объект datetime из заданной строки (представляющей дату и время).
Пример 17: метод strptime().
from datetime import datetime date_string = "21 June, 2018" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object)
Когда вы запустите программу, вывод будет следующим:
date_string = 21 June, 2018
date_object = 2018-06-21 00:00:00
Метод strptime()
принимает два аргумента:
Кстати, коды %d
, %B
и %Y
используются для обозначения дня, месяца (название месяца в полном виде) и года соответственно.
Перейдите по ссылке чтобы узнать больше о методе strptime()
.
Предположим, вы работаете над проектом и должны отображать дату и время в зависимости от часового пояса пользователей. Вместо того, чтобы пытаться обрабатывать часовой пояс самостоятельно, мы предлагаем вам использовать модуль pytZ.
from datetime import datetime import pytz local = datetime.now() print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S")) tz_NY = pytz.timezone('America/New_York') datetime_NY = datetime.now(tz_NY) print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S")) tz_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))
Когда вы запустите программу, результат будет примерно таким:
Local: 06/29/2020, 00:16:45
NY: 06/28/2020, 17:17:00
London: 06/28/2020, 22:17:00
Здесь datetime_NY
и datetime_London
— это объекты datetime
, содержащие текущую дату и время соответствующего часового пояса.
Pydantic - это мощная библиотека проверки данных и управления настройками для Python, созданная для повышения…
Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…
В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…
В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…
При работе с датами часто возникает необходимость прибавлять к дате или вычитать из нее различные…
В этом руководстве мы рассмотрим, как добавить социальную аутентификацию с помощью GitHub и Google в…