У вас включен AdBlock или иной блокировщик рекламы.

Пожалуйста, отключите его, доход от рекламы помогает развитию сайта и появлению новых статей.

Спасибо за понимание.

В другой раз
DevGang блог о програмировании
Авторизоваться

Как получить текущую дату и время в Python 

Регистрация, сохранение записей в базе данных и доступ к файлам - все это общие задачи, над которыми работает программист. В каждом из этих случаев дата и время играют важную роль в сохранении значения и целостности данных. Программистам часто приходится взаимодействовать с датой и временем.

В этой статье мы узнаем, как получить текущую дату и время, используя встроенный в Python модуль datetime. С помощью этого модуля мы можем получить все соответствующие данные в одном объекте или извлечь дату и время отдельно.

Мы также узнаем, как настроить дату и время для разных часовых поясов. Наконец, мы рассмотрим преобразование объектов datetime в популярные метки времени Unix или Epoch.

Получение текущей даты и времени с datetime

Модуль datetime содержит различные классы, чтобы получить информацию о дате и времени:

  1. datetime.date: Хранит день, месяц и год
  2. datetime.time: Хранит время в часах, минутах, секундах и микросекундах. Эта информация не зависит от даты
  3. 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().

Источник:

#Python

Присоеденяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать