В этой статье мы разберемся, как работать с датой и временем в 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
, содержащий текущую локальную дату.
Что находится внутри datetime?
Мы можем использовать функцию 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
Класс datetime.date
Объект 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
Класс datetime.time
Экземпляр класса 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.datetime
Экземпляр класса 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
Класс datetime.timedelta
Объект 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
вы можете найти в документации.
Формат datetime
Представление даты и времени может отличатся в разных странах, организациях и т. д. В США, например, чаще всего используется формат «мм/дд/гггг», тогда как в Великобритании более распространен формат «дд/мм/гггг».
В Python для работы с форматами есть методы strftime()
и strptime()
.
Python strftime() — преобразование объекта datetime в строку
Метод 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()
и кодах форматирования, перейдите по ссылке.
Python strptime()- преобразование строки в объект datetime
Метод 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()
.
Обработка часового пояса в Python
Предположим, вы работаете над проектом и должны отображать дату и время в зависимости от часового пояса пользователей. Вместо того, чтобы пытаться обрабатывать часовой пояс самостоятельно, мы предлагаем вам использовать модуль 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
, содержащие текущую дату и время соответствующего часового пояса.