Текущая дата и время в Python
Время и дата играют важнейшую роль при решении определенных задач в программировании. Разработчику на Python приходится нередко использовать точные значения текущей (current) даты, к примеру, при сохранении информации в базе данных, вычислениях, регистрации, обеспечении доступа и т. д. В этой статье пойдет разговор о том, как узнать текущие временные значения с помощью модуля datetime. Вдобавок к этому, читатель узнает о временных настройках для разных часовых поясов и преобразовании объектов datetime в метки времени Unix.
Получаем текущую дату и время
Datetime включает в себя разные классы, позволяющие получать нужные временные данные:
Для примера можно вывести в терминал текущую (current) дату и время. Можно воспользоваться объектом datetime.datetime — из него довольно просто извлекаются объекты date и time. Сначала следует импортировать требуемый модуль:
from datetime import datetime
Да, это выглядит странновато, т. к. речь идет о получении класса datetime из модуля datetime, однако это 2 разные вещи. Далее следует воспользоваться функцией now() — она позволит получить объект с текущим временем и датой.
from datetime import datetime
Набрав код выше, вы увидите на экране следующее (в вашем случае вывод изменится, ведь минуты не стоят на месте):
Что произошло? Функция now() отобразила объект, причем с датой и временем создания этого самого объекта. В результате была выведена соответствующая строка. Однако никто не мешает получить временные атрибуты отдельно:
Таким образом, метод now() вполне годится для получения текущей даты и времени. Но что делать, если надо получить лишь дату?
Работа с датой current
Существуют 2 способа получения текущей даты. Первый выводит нужные данные из объекта datetime посредством метода date() :
Во втором применяется метод today() класса date:
Класс datetime.date позволяет получать календарную дату. Также следует добавить, что его атрибуты (year, month, day) бывают доступны и отдельно, как в примере с datetime.
А как поступить, если надо отобразить текущее время отдельно от даты?
Работаем с текущим временем
Здесь отдельно получить часы, минуты, секунды и микросекунды не представляется возможным, да в этом и нет необходимости, т. к. само понятие времени суток не предполагает другого отображения.
Важно отметить, что есть возможность получить временные данные и с учетом нужного часового пояса (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 содержит различные классы, чтобы получить информацию о дате и времени:
Запуск этого файла даст нам следующий вывод:
Функция now() дала нам объект со всей датой и временем его создания. Когда мы его печатаем, Python автоматически форматирует объект в строку, чтобы люди могли его легко прочитать.
Вы можете получить отдельные атрибуты даты и времени следующим образом:
Метод now() идеально подходит для захвата текущего времени и даты. Однако, это излишне, когда вы заботитесь только о дате или времени, но не обоих. Как мы можем получить только информацию о дате?
Получение текущей даты
Есть два способа получить текущую дату в Python. В консоли Python мы можем получить дату из объекта datetime с помощью метода date() :
Тем не менее, это кажется пустой тратой на инициализацию объекта datetime только для захвата даты. Альтернативой может быть использование метода today() класса date :
Например, этот оператор print получает каждый атрибут, а также использует метод weekday() для получения дня недели:
Примечание: Метод weekday() возвращает целое число от 0 до 6 для представления дня недели. 0 соответствует понедельнику. Поэтому в нашем примере мы добавили 1, чтобы напечатать 5-й день недели (пятница), хотя метод weekday() вернул 4.
Теперь, когда мы можем получить текущую дату самостоятельно, давайте посмотрим, как мы можем получить текущее время
Получение текущего времени
Получение текущей даты и времени в другом часовом поясе
Метод now() принимает временную зону в качестве аргумента, так что объект datetime генерируется соответствующим образом. Во-первых, нам нужно получить данные о часовом поясе через библиотеку pytz.
Установите библиотеку pytz :
Теперь давайте используя pytz получим текущую дату и время, если бы мы были в Берлине:
berlin_current_datetime будет объектом datetime со всеми свойствами и функциями, которые мы видели ранее, но теперь он полностью соответствует часовому поясу Берлина.
Преобразование меток времени в даты и время
Компьютерные системы измеряют время на основе количества секунд, прошедших с начала эпохи Unix, то есть 00:00:00 UTC 1 января 1970 года. Приложения, базы данных и протоколы обычно используют временную метку для отображения времени.
Вы можете получить текущую метку времени в Python, используя модуль time :
fromtimestamp() по умолчанию возвращает объект datetime в вашем часовом поясе. Вы можете указать часовой пояс в качестве второго аргумента, если хотите, чтобы он был локализован по-другому.
Например, чтобы преобразовать метку времени в объект datetime в формате UTC, вы можете сделать это:
И наоборот, вы можете использовать метод timestamp() для преобразования объекта datetime в допустимую метку времени:
Вывод
Модуль time
Модуль time из стандартной библиотеки языка программирования Python содержит массу полезных методов для работы со временем. С его помощью можно получать информацию о текущей дате и времени с точностью до миллисекунд, выводить эти сведения в необходимом формате, а также управлять ходом выполнения программы, добавляя задержки по таймеру.
Текущее время в Python
Работа методов из модуля time основывается на общепринятой системе описания времени, которая справедлива для Unix, а также для POSIX-совместимых ОС. Согласно ее концепции, текущее время представляется в виде обыкновенного вещественного значения в секундах, прошедших с момента начала эпохи и до сегодняшнего дня. Отправной точкой для времени считается 1 января 1970 года, когда счетчик секунд имел полностью нулевое значение.
С тех пор это число постоянно растет, позволяя людям работать с различными видами дат в максимально точном представлении. В случае необходимости секунды переводятся в часы, дни, месяцы и годы, предоставляя пользователю удобный вид отображения времени. Чтобы увидеть количество секунд, прошедших с момента начала эпохи, достаточно вызвать метод time(). Но перед этим необходимо подключить модуль time с помощью операции импорта.
Как можно увидеть из данного примера, функция print получает в качестве единственного параметра число, возвращенное из метода time(), после чего выводит его на экран. Таким образом, с 1 января 1970 года прошло уже более полтора миллиарда секунд. Но подобное представление времени совсем неудобно для пользователя программы. Чтобы отобразить текущую дату в более комфортном виде, стоит передать функции print результат работы метода ctime(), не забыв произвести импорт соответствующей ему библиотеки time.
В результате выполнения вышеописанной программы на экране будут отображены точные сведения о текущем времени, которые включают в себя день недели, название месяца, его число, часы, минуты, секунды и год. Кроме того, в качестве параметра методу ctime() можно передать любое значение в секундах, полученное при помощи упомянутого ранее time().
Методы
Для работы с временем в стандартной библиотеке языка Python имеется множество самых разных методов. Наиболее популярные функции, реализованные в модуле time, описаны в следующей таблице. Здесь можно найти их название, а также краткую характеристику.
| Метод | Характеристика |
| time() | возвращает текущее время, прошедшее с начала 1970 года в секундах |
| ctime(s) | возвращает местное время в строке или время, полученное из s секунд |
| clock() | возвращает процессорное время, прошедшее с момента первого вызова этой функции, точность больше 1 микросекунды |
| sleep(s) | останавливает ход выполнения программы ровно на s секунд |
| strftime(s) | преобразует переданное в качестве аргумента время s в строку по формату |
| strptime(s) | разбирает строку s и преобразует в объект времени по формату |
| mktime(s) | преобразует время s в количество секунд с начала 1970 года |
| localtime(s) | возвращает объект, представляющий местное время или время s |
Форматированный вывод
Принцип работы метода ctime() заключается в представлении секундного вещественного значения в более удобном виде, благодаря автоматическому форматированию. Некоторым пользователям предложенный подобным образом вывод данных может показаться чересчур сложным для восприятия либо же недостаточно информативным. Именно поэтому методы модуля time позволяют создавать свои уникальные типы форматирования для дат. В данном случае речь пойдет о функции strftime, принимающей в качестве параметров текущее время и шаблон, который будет использоваться для форматирования полученного объекта.
В следующем примере демонстрируется вывод значения, переданного функцией localtime() в strftime. То есть, мы в Python получим текущее время и выведем его в отформатированном виде. Первым аргументом метода strftime является строка с некоторым набором правил для форматирования, каждое из которых указано при помощи символа %. В результате, на экране выводится информация, включающая название месяца, число и год.
Существует большое количество символов форматирования, отвечающих за отображение отдельных свойств объекта, представляющего собой дату. Важно запомнить, что каждое новое правило необходимо отделять знаком %. Все доступные типы форматов для вывода данных о времени подробно описаны в следующей таблице. Их можно передавать методу strftime в любом порядке, помещая в строковый литерал, который служит параметром.
| Формат | Свойство |
| %a | короткое название дня недели |
| %A | полное название дня недели |
| %b | короткое название месяца |
| %B | полное название месяца |
| %c | дата и время |
| %d | день месяца |
| %H | количество часов в 24-часовом формате |
| %I | количество часов в 12-часовом 1формате |
| %j | день года |
| %m | номер месяца |
| %M | количество минут |
| %p | до или после полудня для 12-часового формата |
| %S | количество секунд |
| %U | номер недели в году, начиная с воскресенья |
| %w | номер дня недели |
| %W | номер недели в году, начиная с понедельника |
| %x | дата |
| %X | время |
| %y | год без указания века |
| %Y | полное представление года |
| %Z | название часового пояса |
| %% | символ процента |
Применение метода sleep
Выполнение многих задач в программировании так или иначе связано с течением времени. Иногда программа должна прекращать ход своего выполнения на определенное количество секунд, минут или часов. Это вполне может потребоваться в тех случаях, когда компьютер взаимодействует с какой-либо внешней системой, например, базой данных, которая должна завершить выполнение собственных задач, прежде чем перейти к следующему действию.
Перевести программу в ждущий режим, временно заморозив ее работу, можно при помощи метода sleep, доступного в модуле time. Его единственным аргументом является количество секунд, которое следует выждать программе, прежде чем перейти к дальнейшему шагу из прописанного алгоритма. В следующем фрагменте кода функция sleep работает 10 секунд.
Как можно увидеть из результатов выполнения кода, вначале на экран выводится стартовое сообщение, после чего программа прекращает свою работу ровно на 10 секунд, поскольку метод sleep получает переменную pause в качестве аргумента. Затем отображается последняя запись, информирующая пользователя о том, какое количество секунд длилась задержка.
Время выполнения программы
Существует множество разных задач, для решения которых нужно найти время, потраченное на работу программы либо отдельных ее блоков. Чтобы найти данную величину, достаточно посчитать разницу в секундах между точкой старта определенной функции и местом, где она завершает свою работу. В следующем примере демонстрируется применение методов time() для получения текущего времени, чтобы в конечном итоге выявить, как долго работал блок кода. Метод sleep() здесь увеличивает время выполнения программы на 5 секунд.
Несмотря на простоту вышеописанного подхода, использовать его в серьезных целях, где требуется точный и независимый от ОС результат, не рекомендуется. Все дело в том, что числовое значение времени, получаемое таким образом, может иметь погрешности за счет внутренних особенностей работы компьютера, в среде которого выполняется программа. Например, системные часы могут быть подкорректированы вручную пользователем во время выполнения программы. Корректировка может произойти и автоматически, если настроена синхронизация системных часов по NTP.
Таким образом, может случиться такая ситуация, что функция вернет значение меньшее, чем при предыдущем вызове.
monotonic
По этой причине лучше всего использовать метод monotonic(), впервые появившийся в версии Python 3.3 на некоторых платформах, а начиная с выпуска 3.5 ставший доступным абсолютно везде. Его главной особенностью является точное представление измеряемого количества времени, вне зависимости от работы ОС и текущей платформы. Используемый таймер никогда не вернет при повторном вызове метода значение, которое будет меньше предыдущего. Это позволяет избежать многих ошибок, а также неожиданного поведения.
В примере программы, описанном выше, продемонстрирована работа функции monotonic(). Принцип ее применения такой же, как и в предыдущем примере, однако здесь результат обладает гарантированной точностью и независим от внешних условий. Для отображения времени в более комфортной форме используется небольшое форматирование результата.
Заключение
Используя стандартный библиотечный модуль time в Python 3, можно всячески взаимодействовать с информацией о текущем времени. Таким образом, использование библиотеки дает возможность:
Как управлять датой и временем в Python?
В этой статье вы научитесь управлять датой и временем в Python с помощью примеров.
В Python есть модуль datetime для работы с датой и временем. Прежде чем копать глубже, давайте создадим несколько простых программ, связанных с датой и временем.
Как получить текущую дату и время в Python?
Простая программа с помощью которой можно получить текущую дату и время в Python:
Когда вы запустите программу, результат будет примерно таким:
Здесь мы импортировали модуль datetime, используя оператор import datetime.
Один из классов, определенных в модуле datetime, ‒ это класс datetime. Затем мы использовали метод now() для создания объекта datetime, содержащего текущие локальные дату и время.
Как получить текущую дату?
Когда вы запустите программу, результат будет примерно таким:
В этой программе мы использовали метод today(), определенный в классе даты, чтобы получить объект даты, содержащий текущую локальную дату.
Что внутри datetime?
Мы можем использовать функцию dir(), чтобы получить список, содержащий все атрибуты модуля.
Когда вы запустите программу, вывод будет:
Обычно используемые классы в модуле datetime:
Класс datetime.date
Вы можете создавать экземпляры объектов даты из класса даты. Объект представляет собой дату (год, месяц и день).
Объект Date для представления даты
Когда вы запустите программу, вывод будет:
В приведенном выше примере date() является конструктором класса даты. Конструктор принимает три аргумента: год, месяц и день.
Переменная a ‒ объект даты.
Мы можем импортировать только класс даты из модуля datetime. Вот как:
Пример: Получить текущую дату
Вы можете создать объект даты, содержащий текущую дату, используя метод класса с именем today(). Вот как:
Пример: Получить дату из отметки времени
Мы также можем создавать объекты даты из отметки времени. Отметка времени Unix ‒ это количество секунд между определенной датой и 1 января 1970 года по всемирному координированному времени. Вы можете преобразовать метку времени в дату, используя метод fromtimestamp().
Когда вы запустите программу, вывод будет:
Пример: Вывести сегодняшний год, месяц и день
Мы можем легко получить год, месяц, день, день недели и т.д. из объекта даты. Вот как:
datetime.time
Объект времени, созданный из класса времени, представляет местное время.
Объект времени для представления времени
Когда вы запустите программу, вывод будет:
Вывод часа, минуты, секунды и микросекунды
Когда вы запустите пример, результат будет:
Обратите внимание, что мы не передали аргумент микросекунды. Следовательно, печатается его значение по умолчанию 0.
datetime.datetime
В модуле datetime есть класс с именем dateclass, который может содержать информацию как из объектов даты, так и времени.
Объект datetime
Когда вы запустите программу, вывод будет:
Первые три аргумента год, месяц и день в конструкторе datetime() являются обязательными.
Напечатать год, месяц, час, минуту и отметку времени
Когда вы запустите программу, вывод будет:
datetime.timedelta
Объект timedelta представляет разницу между двумя датами или временем.
Разница между двумя датами и временем
Когда вы запустите программу, вывод будет:
Разница между двумя объектами timedelta
Когда вы запустите программу, вывод будет:
Печать отрицательного объекта timedelta
Когда вы запустите программу, вывод будет:
Продолжительность времени в секундах
Вы можете получить общее количество секунд в объекте timedelta, используя метод total_seconds().
Когда вы запустите программу, вывод будет:
Вы также можете найти сумму двух дат и времени, используя оператор +. Кроме того, вы можете умножать и делить объект timedelta на целые числа и числа с плавающей запятой.
Дата и время в формате Python
Дата и время могут быть разными в разных местах, организациях и т.д. в США чаще используется мм/дд/гггг, а в Великобритании ‒ дд/мм/гггг.
Для этого в Python есть методы strftime() и strptime().
Метод strftime() ‒ объект datetime для строки
Метод определяется в классах date, datetime и time. Метод создает форматированную строку из заданного объекта даты, даты, времени или времени.
Форматирование даты с помощью strftime()
Когда вы запустите программу, результат будет примерно таким:
Здесь % Y,% m,% d,% H и т.д. являются кодами формата. Метод strftime() принимает один или несколько кодов формата и возвращает на его основе отформатированную строку.
Python strptime() ‒ строка для даты и времени
Метод создает объект datetime из заданной строки (представляющей дату и время).
strptime()
Когда вы запустите программу, вывод будет:
Метод принимает два аргумента:
Кстати, коды формата% d,% B и% Y используются для дня, месяца (полное имя) и года соответственно.
Обработка часового пояса
Предположим, вы работаете над проектом и вам нужно отображать дату и время в соответствии с их часовым поясом. Вместо того, чтобы пытаться самостоятельно обрабатывать часовой пояс, мы предлагаем вам использовать сторонний модуль pytZ.
Когда вы запустите программу, результат будет примерно таким:
Здесь datetime_NY и datetime_London ‒ это объекты, содержащие текущую дату и время соответствующего часового пояса.














