Текущая дата и время в Python OTUS

Время и дата играют важнейшую роль при решении определенных задач в программировании. Разработчику на Python приходится нередко использовать точные значения текущей (current) даты, к примеру, при сохранении информации в базе данных, вычислениях, регистрации, обеспечении доступа и т. д. В этой статье пойдет разговор о том, как узнать текущие временные значения с помощью модуля datetime. Вдобавок к этому, читатель узнает о временных настройках для разных часовых поясов и преобразовании объектов datetime в метки времени Unix.

Получаем текущую дату и время

Datetime включает в себя разные классы, позволяющие получать нужные временные данные:

  1. datetime.date: день, месяц и год;
  2. datetime.time: время в часах, минутах, секундах, а также микросекундах. Тут дата значения не имеет;
  3. datetime.datetime: здесь хранятся атрибуты date и time.

Для примера можно вывести в терминал текущую (current) дату и время. Можно воспользоваться объектом datetime.datetime — из него довольно просто извлекаются объекты date и time. Сначала следует импортировать требуемый модуль:

from datetime import datetime

Да, это выглядит странновато, т. к. речь идет о получении класса datetime из модуля datetime, однако это 2 разные вещи. Далее следует воспользоваться функцией now() — она позволит получить объект с текущим временем и датой.

from datetime import datetime

current_datetime = datetime.now()

print(current_datetime)

Набрав код выше, вы увидите на экране следующее (в вашем случае вывод изменится, ведь минуты не стоят на месте):

Что произошло? Функция now() отобразила объект, причем с датой и временем создания этого самого объекта. В результате была выведена соответствующая строка. Однако никто не мешает получить временные атрибуты отдельно:  

Таким образом, метод now() вполне годится для получения текущей даты и времени. Но что делать, если надо получить лишь дату?

Работа с датой current

Существуют 2 способа получения текущей даты. Первый выводит нужные данные из объекта datetime посредством метода date():

Во втором применяется метод today() класса date:

Класс datetime.date позволяет получать календарную дату. Также следует добавить, что его атрибуты (year, month, day) бывают доступны и отдельно, как в примере с datetime.

Тут все понятно и просто. Но есть нюанс: если надо получить день недели, прописывают current_date.weekday()+1. Дело в том, что нумерация дней недели начинается с нуля, то есть понедельник — это 0, вторник — 1, среда — 2 и так далее. Если такое положение вещей устраивает, +1 можно и не добавлять.

А как поступить, если надо отобразить текущее время отдельно от даты?

Работаем с текущим временем

Текущее время от объекта datetime получают посредством метода time(). Вот как это выглядит:

Здесь отдельно получить часы, минуты, секунды и микросекунды не представляется возможным, да в этом и нет необходимости, т. к. само понятие времени суток не предполагает другого отображения.

Важно отметить, что есть возможность получить временные данные и с учетом нужного часового пояса (timezone). Как и что используется, поговорим ниже.

Другой часовой пояс: временные зоны (timezones)

Метод now() принимает в Python временную зону в качестве аргумента, так что объект datetime генерируется соответствующим образом. 

Для получения информации с учетом часового пояса необходимо задействовать библиотеку pytz (если ее нет, потребуется инсталляция, для чего подойдет команда pip3 install pytz).

Так как я нахожусь в Минске, давайте получим текущие временные значения (times) именно для Минска:

Строка в коде minsk_current_datetime является объектом datetime, то есть все то же самое, что и ранее, но уже в полном соответствии с часовым поясом Республики Беларусь.

Когда надо узнать время в UTC, тоже пригодится модуль pytz:

Получить время UTC можно и без модуля pytz, т. к. datetime имеет полезное свойство timezone. Что же, давайте задействуем свойство timezone:

Таким образом, можно без проблем преобразовать текущие даты и значения времени в различные часовые пояса.

Преобразование временных меток

Также может быть очень полезным преобразовывать время в один из самых широко применяемых форматов в вычислениях. Речь идет о временных метках Unix.

Доподлинно известно, что компьютерные системы измеряют время не так, как люди. Здесь за основу берется число секунд, которые прошли с начала Unix-эпохи, то есть с 00:00:00 UTC 1. 01.1979. Базы данных, протоколы и приложения обычно задействуют временную метку.

Для ее получения в «Питоне» пригодится модуль time, следовательно, первая строка будет import time:

Функция time.time() возвращает пользователю число с плавающей запятой и с временной меткой Unix. 

На этом все. Очень надеемся, что вы получили некоторое представление об использовании встроенных Python-библиотек и модулей, необходимых для отображения временных значений.

Источник

Как получить текущую дату и время в 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 3

спросил

Изменено 4 года, 3 месяца назад

Просмотрено 26 тысяч раз

У меня проблемы с печатью времени на python. Вот код, который я недавно пробовал:

 из time import gmtime, strftime
strftime("%Y-%m-%d %H:%M:%S", gmtime())
 
  • python
  • python-3.x
  • datetime
  • время
  • консоль
2

Ваш исходный код был правильным, но в нем отсутствовал оператор печати.

 из времени импорта gmtime, strftime
print (strftime("%Y-%m-%d %H:%M:%S", gmtime()))
# выход
2019-02-14 14:56:18
 

Вот несколько других способов получить метку времени в формате всемирного координированного времени (UTC) / среднего времени по Гринвичу (GMT).

 из даты и времени импорта даты и времени
из часового пояса импорта datetime
current_GMT_timestamp = datetime.utcnow()
печать (current_GMT_timestamp)
# выход
2019-02-14 14:56:18.827431
# миллисекунды удалены из временной метки GMT
переформатированный_GMT_timestamp = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')
печать (reformatted_GMT_timestamp)
# выход
2019-02-14 14:56:18
# GMT в формате ISO
current_ISO_GMT_timestamp = datetime. now(timezone.utc).isoformat()
печать (current_ISO_GMT_timestamp)
# выход
2019-02-14T14:56:18.827431+00:00
 

В чем проблема? Ваш код работает

 λ python
Python 3.7.0 (по умолчанию, 28 июня 2018 г., 08:04:48) [MSC v.1912 64 бит (AMD64)] :: Anaconda, Inc. на win32
Введите «помощь», «авторское право», «кредиты» или «лицензия» для получения дополнительной информации.
>>> из времени импортировать gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2019-02-14 13:56:02'
>>> strftime("%H:%M:%S", gmtime())
'13:56:16'
>>>
 

РЕДАКТИРОВАТЬ:

Этот код отлично работает в терминале — как упоминалось @ForceBru, если вы запускаете его в сценарии, вам нужно будет использовать функцию печати для отображения результата strftime

 из времени импортировать gmtime, strftime
print(strftime("%Y-%m-%d %H:%M:%S", gmtime()))
> '2019-02-14 13:56:02'
print(strftime("%H:%M:%S", gmtime()))
> '13:56:16'
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

datetime — в Python, как отображать текущее время в удобочитаемом формате

спросил

Изменено 2 года назад

Просмотрено 178 тысяч раз

Как я могу отображать текущее время как:

 12:18 EST 18 октября 2010 г. 
 

на Питоне. Спасибо.

  • питон
  • дата-время
  • время
5

Во-первых, быстрый и грязный способ, а во-вторых, точный способ (с учетом перехода на летнее время или без).

 время импорта
time.ctime() # 'Пн, 18 октября, 13:35:29 2010'
time.strftime('%l:%M%p %Z на %b %d, %Y') # ' 13:36 EDT, 18 октября 2010 г.'
time.strftime('%l:%M%p %z на %b %d, %Y') # ' 13:36 EST, 18 октября 2010 г.'
 
2

Все, что вам нужно, есть в документации.

 время импорта
time.strftime('%X %x %Z')
'16:08:12 08.05.03 AEST'
 

Используя этот код, вы получите свой часовой пояс.

 импорт даты и времени
сейчас = datetime.datetime.now()
print("Текущая дата и время:")
печать (сейчас.strftime("%Y-%m-%d %H:%M:%S"))
 
0

 время импорта
time.strftime('%H:%M%p %Z на %b %d, %Y')
 

Это может пригодиться

1

Вы можете сделать что-то вроде:

 >>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
«Чт, 28 июня 2001 г.