Рубрики
Без рубрики

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

Ведение журнала, сохранение записей, доступ к файлам и задачам очень распространены. Во всех них получение текущей даты и времени часто имеет решающее значение. Мы можем извлечь текущую дату и время с помощью модуля datetime в Python.

Автор оригинала: Sajjad Heydari.

Вступление

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

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

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

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

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

  • дата-время.дата : Хранит день, месяц и год или дату
  • время : Сохраняет время в часах, минутах, секундах и микросекундах. Эта информация не зависит от какой-либо даты
  • datetime.datetime : Хранит оба атрибута date и time

Давайте получим текущую дату и время с помощью объекта datetime.datetime , так как из него легче извлечь объекты date и time . Во-первых, давайте импортируем модуль datetime :

from datetime import datetime

Хотя на первый взгляд это выглядит странно, мы получаем класс date time из модуля datetime , которые являются двумя отдельными вещами.

Мы можем использовать функцию now() для получения объекта с текущей датой и временем:

current_datetime = datetime.now()
print(current_datetime)

Запуск этого файла даст нам следующий результат:

2019-12-13 12:18:18.290623

Функция now() дала нам объект со всеми датами и временем момента его создания. Когда мы печатаем его, Python автоматически форматирует объект в строку, чтобы он мог быть легко прочитан человеком. Вы можете прочитать наше руководство по Как форматировать даты в 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

дата-время.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 .

Получение текущей даты и времени в разных часовых поясах

Метод new() принимает часовой пояс в качестве аргумента, так что генерируемый объект datetime будет соответствующим образом скорректирован. Во-первых, нам нужно получить данные о часовом поясе через библиотеку pytz .

Установите библиотеку pytz с помощью pip , если она уже недоступна на вашем компьютере:

$ 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_date time был бы объектом 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 с помощью функции from timestamp() :

>>> from datetime import datetime
>>> print(datetime.fromtimestamp(1576280665))
2019-12-13 19:44:25

По умолчанию функция from timestamp() возвращает объект 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

Вывод

Встроенная библиотека Pythons datetime позволяет нам получить текущую дату и время с помощью функции now () . Мы можем использовать возвращаемый объект datetime для извлечения только части даты или части времени. Мы также можем получить текущую дату с помощью функции today () .

По умолчанию Python создает объекты datetime в нашем локальном часовом поясе. Если мы используем библиотеку pytz , мы можем конвертировать даты и время в разные часовые пояса.

Наконец, мы использовали функцию from timestamp () , чтобы взять временную метку Unix для получения объекта datetime . Если у нас есть объект datetime , мы можем получить метку времени, используя его метод timestamp () .