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

Введение Ведение журнала, сохранение записей в базе данных и доступ к файлам - все это общие задачи, над которыми работает программист. В каждом из этих случаев дата и время играют важную роль в сохранении смысла и целостности данных. Программистам часто приходится интересоваться датой и временем. В этой статье мы узнаем, как получить текущую дату и время, используя встроенный в Python модуль datetime [https://docs.python.org/3.8/library/datetime.html]. С помощью этого модуля мы можем получить все необходимые данные в одном

Вступление

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

В этой статье мы узнаем, как получить текущую дату и время, используя встроенный в 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 автоматически форматирует объект в строку, чтобы люди могли легко его прочитать. Вы можете прочитать наше руководство о том, как форматировать даты в 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 с помощью 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_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 

Заключение

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

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

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

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus