Как получить текущую дату и время в Python
Регистрация, сохранение записей в базе данных и доступ к файлам - все это общие задачи, над которыми работает программист. В каждом из этих случаев дата и время играют важную роль в сохранении значения и целостности данных. Программистам часто приходится взаимодействовать с датой и временем.
В этой статье мы узнаем, как получить текущую дату и время, используя встроенный в Python модуль datetime. С помощью этого модуля мы можем получить все соответствующие данные в одном объекте или извлечь дату и время отдельно.
Мы также узнаем, как настроить дату и время для разных часовых поясов. Наконец, мы рассмотрим преобразование объектов datetime
в популярные метки времени Unix или Epoch.
Получение текущей даты и времени с datetime
Модуль datetime
содержит различные классы, чтобы получить информацию о дате и времени:
datetime.date
: Хранит день, месяц и годdatetime.time
: Хранит время в часах, минутах, секундах и микросекундах. Эта информация не зависит от датыdatetime.datetime
: Хранит атрибутыdate
иtime
Получим текущую дату и время с объектом datetime.datetime
, так как из него легче извлечь объекты date
и time
. Для начала давайте импортируем модуль datetime
:
from datetime import datetime
Поначалу это выглядит странно, но мы получаем класс datetime
из модуля datetime
, это две разные вещи.
Мы можем использовать функцию now()
, чтобы получить объект с текущей датой и временем:
current_datetime = datetime.now()
print(current_datetime)
Запуск этого файла даст нам следующий вывод:
2019-12-13 12:18:18.290623
Функция now()
дала нам объект со всей датой и временем его создания. Когда мы его печатаем, Python автоматически форматирует объект в строку, чтобы люди могли его легко прочитать.
Вы можете получить отдельные атрибуты даты и времени следующим образом:
print(current_datetime.year) # 2019
print(current_datetime.month) # 12
print(current_datetime.day) # 13
print(current_datetime.hour) # 12
print(current_datetime.minute) # 18
print(current_datetime.second) # 18
print(current_datetime.microsecond) # 290623
Метод now()
идеально подходит для захвата текущего времени и даты. Однако, это излишне, когда вы заботитесь только о дате или времени, но не обоих. Как мы можем получить только информацию о дате?
Получение текущей даты
Есть два способа получить текущую дату в Python. В консоли Python мы можем получить дату из объекта datetime
с помощью метода date()
:
>>> from datetime import datetime
>>> current_date = datetime.now().date()
>>> print(current_date)
2019-12-13
Тем не менее, это кажется пустой тратой на инициализацию объекта datetime
только для захвата даты. Альтернативой может быть использование метода today()
класса date
:
>>> from datetime import date
>>> current_date = date.today()
>>> print(current_date)
2019-12-13
Класс datetime.date
представляет собой календарную дату. Его атрибуты year
, month
и day
могут быть доступны так же, как мы обращаемся к ним в объекте datetime
.
Например, этот оператор print
получает каждый атрибут, а также использует метод weekday()
для получения дня недели:
>>> print("It's the %dth day of the week, %dth day of the %dth month of the %dth year" %
... (current_date.weekday()+1, current_date.day, current_date.month, current_date.year))
It's the 5th day of the week, 13th day of the 12th month of the 2019th year
Примечание: Метод weekday()
возвращает целое число от 0 до 6 для представления дня недели. 0 соответствует понедельнику. Поэтому в нашем примере мы добавили 1, чтобы напечатать 5-й день недели (пятница), хотя метод weekday()
вернул 4.
Теперь, когда мы можем получить текущую дату самостоятельно, давайте посмотрим, как мы можем получить текущее время
Получение текущего времени
Мы фиксируем текущее время от объекта datetime
, используя метод time()
:
>>> from datetime import datetime
>>> current_time = datetime.now().time()
>>> print(current_time)
12:18:18.290623
В отличие от получения дат, здесь нет ярлыка для непосредственного отображения текущего времени. Класс datetime.time
представляет собой понятие времени как в часах, минутах, секундах и микросекунд - все, что меньше, чем один день.
Как и объект datetime
, мы можем получить доступ к его атрибутам напрямую. Вот пример, как мы печатаем current_time
в предложении:
>>> print("It's %d o'clock. To be exact, it's %d:%d and %d seconds with %d microseconds" %
... (current_time.hour, current_time.hour, current_time.minute, current_time.second, current_time.microsecond))
It's 12 o'clock. To be exact, it's 12:18 and 18 seconds with 290623 microseconds
По умолчанию функция now()
возвращает время вашего местного часового пояса. Что если нам нужно будет преобразовать его в другой, который был установлен в настройках пользователя? Давайте посмотрим, как мы можем предоставить информацию о часовом поясе для получения локализованных объектов time
.
Получение текущей даты и времени в другом часовом поясе
Метод now()
принимает временную зону в качестве аргумента, так что объект datetime
генерируется соответствующим образом. Во-первых, нам нужно получить данные о часовом поясе через библиотеку pytz.
Установите библиотеку pytz
:
$ pip3 install pytz
Теперь давайте используя pytz
получим текущую дату и время, если бы мы были в Берлине:
>>> import pytz
>>> from datetime import datetime
>>> tz = pytz.timezone('Europe/Berlin')
>>> berlin_current_datetime = datetime.now(tz)
>>> print(berlin_current_datetime)
2019-12-14 00:20:50.840350+01:00
berlin_current_datetime
будет объектом datetime
со всеми свойствами и функциями, которые мы видели ранее, но теперь он полностью соответствует часовому поясу Берлина.
Если вы хотите узнать время в UTC, вы можете использовать модуль pytz
, как и раньше:
>>> import pytz
>>> from datetime import datetime
>>> utc_current_datetime = datetime.now(pytz.timezone("UTC"))
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00
Кроме того, для времени UTC вам не нужно использовать модуль pytz
вообще. Модуль datetime
имеет свойство timezone
, которое может быть использовано, как в примере:
>>> from datetime import datetime, timezone
>>> utc_current_datetime = datetime.now(timezone.utc)
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00
Теперь, когда мы можем преобразовать наши даты и время в разные часовые пояса, давайте посмотрим, как мы можем преобразовать его в один из наиболее широко используемых форматов в вычислениях - временные метки Unix.
Преобразование меток времени в даты и время
Компьютерные системы измеряют время на основе количества секунд, прошедших с начала эпохи Unix, то есть 00:00:00 UTC 1 января 1970 года. Приложения, базы данных и протоколы обычно используют временную метку для отображения времени.
Вы можете получить текущую метку времени в Python, используя модуль time
:
>>> import time
>>> print(time.time())
1576280665.0915806
Функция time.time()
возвращает число с плавающей запятой с меткой времени Unix. Вы можете преобразовать метку времени в объект datetime
, используя функцию fromtimestamp()
:
>>> from datetime import datetime
>>> print(datetime.fromtimestamp(1576280665))
2019-12-13 19:44:25
fromtimestamp()
по умолчанию возвращает объект datetime
в вашем часовом поясе. Вы можете указать часовой пояс в качестве второго аргумента, если хотите, чтобы он был локализован по-другому.
Например, чтобы преобразовать метку времени в объект datetime
в формате UTC, вы можете сделать это:
>>> from datetime import datetime, timezone
>>> print(datetime.fromtimestamp(1576280665, timezone.utc))
2019-12-13 19:44:25+00:00
И наоборот, вы можете использовать метод timestamp()
для преобразования объекта datetime
в допустимую метку времени:
>>> from datetime import datetime, timezone
>>> print(datetime.now(timezone.utc).timestamp())
1577117555.940705
Вывод
Встроенная Python библиотека datetime
позволяет нам получать текущую дату и время с помощью функции now()
. Мы можем использовать возвращенный объект datetime
, чтобы извлечь только часть даты или часть времени. Мы также можем получить текущую дату с помощью функции today()
.
По умолчанию Python создает объекты datetime
в нашем местном часовом поясе. Если мы используем библиотеку pytz
, мы можем конвертировать даты и время в разные часовые пояса.
Наконец, мы использовали функцию fromtimestamp()
для получения метки времени Unix для получения объекта datetime
. Если у нас есть объект datetime
, мы можем получить метку времени, используя его метод timestamp()
.