Как вывести дату в python
Модуль datetime
Модуль datetime из стандартной библиотеки языка программирования Python представляет собой сборник из самых разных классов для комфортной работы со временем и датами. За счет множества встроенных методов, предназначенных для удобного отображения, а также манипуляции над временем и датами, повышается функциональность некоторых программ.
Применение
Библиотека datetime используется для работы в Python со временем и датами, позволяя представлять данную информацию в наиболее удобной форме.
Она состоит из нескольких классов. Благодаря их наличию, программист получает доступ к многим полезным методам:
В модуле используются константы MINYEAR и MAXYEAR, которые равны 1 и 9999 соответственно. Это минимальное и максимально возможное значение года, используемые в библиотеке.
Отличие datetime от time
Но в Python помимо библиотеки datetime есть еще библиотека time. Давайте разберемся, какую из них нам следует использовать:
Модуль time обычно используется при работе с текущем временем, основывающемся на значении в секундах, прошедших с начала эпохи. Позволяет делать его форматированный вывод. Есть возможности установки пауз в выполнении скрипта с помощью метода sleep. Используется для вычисления времени работы программы с помощью monotonic.
В отличие от модуля time, в datetime есть несколько встроенных классов, позволяющих производить различные манипуляции с датой и временем, такие как арифметические операции или сравнение.
Классы библиотеки
Модуль datetime включает в себя несколько разных классов, каждый из которых обладает собственными методами и свойствами, а также служит для определенных целей. Все они представлены в следующей таблице, где содержатся их названия и краткая характеристика.
Название | Характеристика |
date | представляет собой дату, полностью исключая данные о времени, на основе Григорианского календаря |
time | включает данные о времени, полностью игнорируя сведения о дате |
datetime | содержит информацию о времени и дате, основываясь на данных из Григорианского календаря |
timedelta | описывает определенный период во времени, который находится между двумя различными моментами |
tzinfo | представляет различные сведения о часовом поясе |
timezone | описывает время, руководствуясь стандартом UTC |
Далее будет рассмотрено как с помощью этих классов можно в Python работать с датой и временем. Разберем основные примеры использования библиотеки datetime.
Класс date используется для представления данных о дате, которые включают год, месяц и число. Чтобы иметь возможность применять этот класс, необходимо предварительно импортировать модуль datetime, поместив соответствующую инструкцию в начало файла с программным кодом. Для создания объектов типа date следует произвести вызов одноименного конструктора, указав ему в качестве параметров сведения о дате. При этом нельзя забывать о порядке, в котором находятся аргументы: год, затем месяц и число.
Следующий пример демонстрирует создание объекта date, где переменная под названием a получает три обозначенных выше значения. После этого сведения о дате выводятся на экран при помощи метода print, а функция type позволяет получить имя класса для этого объекта.
Если необходимо в Python получить информацию о текущей дате, совсем необязательно вызывать стандартный конструктор date и вручную вбивать подходящие значения. С этой задачей как нельзя лучше справляется встроенный метод today. В следующем фрагменте кода показано как можно быстро присвоить сегодняшнюю дату объекту, а затем вывести эту информацию.
Иногда приходится работать не только с общими сведениями о дате, но и с отдельными ее составляющими, годом, месяцем или днем. Получить доступ к данным свойствам объекта можно с помощью оператора точки. Однако следует помнить, что изменить их у текущего объекта нельзя. В следующем примере показывается как переменная a инициализируется с помощью конструктора, после чего на экране отображаются все ее свойства по-отдельности.
Класс time служит для демонстрации данных о времени, полностью игнорируя дату. Как и в случае с предыдущим классом date, следует импортировать модуль datetime с помощью ключевого слова import. Создать объект, принадлежащий к типу time можно с помощью конструктора, который принимает такие аргументы как количество часов, минут, секунд и микросекунд. Указывая данные параметры, не стоит забывать об их необходимом порядке, расставляя числа на правильных позициях. Также нужно помнить, что существуют ограничения, к примеру, нельзя отображать время со значением более 59 на месте секунд.
В следующем фрагменте кода создается переменная a, которой присваивается объект типа time с четырьмя разными свойствами: число часов, минут, секунд и микросекунд. Благодаря методу print выводится информация об этом объекте, а функция type отображает его класс.
Чтобы создать объект типа time необязательно указывать все его свойства в конструкторе. Как видно из результатов выполнения описанной ниже программы, недостающие данные о времени автоматически заполняются нулями, в то время как введенные числа добавляются в объект от большего к меньшему. Таком образом, инициализируются три разных переменных a, b и c, после чего методы print выводят информацию об их текущем состоянии на дисплей.
Также, как и в классе date, пользуясь time, можно получать доступ к отдельным значениям созданного ранее объекта: часам, минутам, секундам и микросекундам. Для этого нужно применить оператор точка, после чего указать конкретное свойство. В следующем примере демонстрируется вывод информации, представляющей отдельные сведения об объекте a.
datetime
Класс datetime позволяет описывать данные об определенном моменте во времени, который учитывает не только часы и минуты, но и сведения о дате. Как и в случае с предыдущими типами объектов, здесь используется конструктор с несколькими аргументами под каждое значение. В следующем примере демонстрируется программа, где переменная под именем a получает объект из стандартного конструктора datetime, после выводит свое значение и тип.
Создавать объекты можно с разным набором параметров, указывая только нужные сведения. Отсутствующие данные по умолчанию будут заполнены нулями. Приведенный ниже код показывает, как создаются два объекта a и b, первый из которых изначально содержит только дату, а второй обладает информацией о дате и о времени.
Получить текущий момент времени можно при помощи двух разных методов, один из которых уже использовался ранее в date. Следующий код демонстрирует вызов функций today и now, возвращающих в Python текущую дату и время с точностью до микросекунд. Метод print как обычно позволяет отобразить эти сведения на дисплее.
Существует определенный формат, в котором дата и время выводятся по умолчанию, но данное представление не всегда удовлетворяет запросы пользователя.
Чтобы в Python преобразовать дату и время в строку нужного формата, следует воспользоваться методом strftime, указав ему в качестве аргумента параметры форматирования. Как можно понять из примера, который находится ниже, за воспроизведение информации о количестве дней или минут отвечают специальные зарезервированные символы, идущие следом за знаком процента.
Стоит заметить, что здесь создаются два совершенно идентичных объекта при помощи метода today. Однако, благодаря работе функции strftime, каждый из них получает свою форму для вывода на экран (день, месяц и год для переменной a, час, минута, секунда для переменной b). После этого метод print отображает сведения в заданном ранее формате.
Доступные типы форматов для вывода через консоль располагаются в следующей таблице. Здесь можно найти их обозначения, а также краткое описание того, что именно они делают.
Формат | Значение |
%a | название дня недели в сокращенном виде |
%A | название дня недели в полном виде |
%w | номер дня недели в виде целого числа |
%d | номер дня месяца в виде целого числа |
%b | название месяца в сокращенном виде |
%B | название месяца в полном виде |
%m | номер месяца в числовом представлении |
%y | номер года без столетия |
%Y | номер года в полном представлении |
%H | количество часов в 24-часовом формате |
%I | количество часов в 12-часовом формате |
%p | до полудня или после полудня в 12-часовом формате |
%M | количество минут в виде целого числа |
%S | количество секунд в виде целого числа |
%f | количество микросекунд в виде целого числа |
%z | часовой пояс в формате UTC |
%Z | название часового пояса |
%j | номер дня в году |
%U | номер недели в году, если считать с воскресенья |
%w | номер недели в году, если считать с понедельника |
%c | местное представление даты и времени |
%x | местное представление даты |
%X | местное представление времени |
%% | символ процента |
Как и в случае с time и date, в классе datetime пользователь в состоянии получать доступ к отдельным свойствам созданного объекта (годам, месяцам, дням, часам, минутам, секундам и микросекундам. В следующем примере кода демонстрируется вывод данных значений.
Сформировать новый объект типа datetime можно и с помощью двух разных объектов, представляющих время и дату (time и date). Для этого используется функция combine. В следующем примере показывается как переменные a и b получают некоторые значения, после чего передаются методу combine в качестве двух параметров.
Операции
Пользуясь классом datetime, можно легко находить разницу между двумя разными датами. Следующим пример демонстрирует создание двух объектов. Переменная a представляет собой дату, которую передает ей метод now, а b задается при помощи конструктора вручную. Выполнив простую операцию нахождения разницы между объектами a и b, можно получить третий объект c. Применение функции print позволяет напрямую вывести на экран его свойства за счет оператора точки.
Перечень доступных операций, с которыми можно работать, располагается в следующей таблице. Здесь находятся примеры операций и их назначение.
Импорт модуля осуществляется следующим путем:
Навигация по посту
Получение текущей даты и времени
Для вывода даты и времени нужно выполнить следующее:
Как видно мы получаем для создания объекта даты и времени используется класс с тем же именем что и модуль datetime.
Когда нужно получить только дату используется класс date:
Получение только времени выполняется через метод time():
Каждый из описываемых классов можно импортировать следующим способом:
Форматирование и перевод в строку
Для получение части даты или времени можно использовать следующие атрибуты:
Так же есть метод strftime, который форматирует даты в нужном формате в строку. Например так мы получим дату в формате, который используется у нас:
Таким же способом можно получить время и дату:
Обратите внимание, что таким способом мы преобразуем объект класса datetime в строку и мы больше не сможем использовать методы по работе с датой (например сравнение):
Мы получим ошибку так как уже работаем со строкой:
Выше описаны основные возможности форматирования используя метод strftime(), но их, конечно, больше.
Получения дня недели и название месяца
Можно получить название дня недели или название. Численный вариант эквивалентен следующим значениям:
Следующий пример вернет день недели в виде числа:
Или получить название:
Такой же принцип по работе с месяцами, где:
Создание объекта даты и времени
Для создания даты используется класс с аргументами date(год, месяц, число):
Можно создать дату и время. В обоих случаях мы можем использовать именованные аргументы если так удобнее:
Каждый аргумент времени, по умолчанию, имеет значение 0. Мы так же можем использовать подход выше для получения, например, только года или времени:
Если вы не укажете год, месяц или день, то получите ошибку т.к. они по умолчанию равны None:
Есть отдельный класс для создания времени time:
Создание из строк
Используя strptime() можно создавать объект datetime из строки:
Продолжительность времени с timedelta
Все атрибуты, которые мы можем указывать для этого класса:
Кроме этого мы можем преобразовывать эти объекты в секунды:
Разница между датами
Мы можем искать разницу между датами получая объект timedelta:
Изменение объектов
Каждый их объектов выше можно изменить. Так мы изменим объект timedelta прибавив часы к минутам:
С помощью timedelta изменяется и дата. Пример ниже изменяет текущую дату прибавляя к ней 1 день и 1 час:
Сравнение и условия
Каких либо хитростей в сравнении объектов нет. В следующем примере идет сравнение двух дат с разницей в день:
При этом стоит проверять, что объекты относятся к классу datetime, а не являются строками. В следующем примере мы сравниваем года, но они уже относятся к численным:
Объект timedelta тоже можно сравнивать:
Работа с метками (штампами) timestamp
При работе с API или в Unix системах мы можем увидеть отображение времени в таком формате:
Данные числа обозначают количество секунд с 1 января 1970 года. Мы можем конвертировать данное число в понятный формат используя datetime:
Так же сработает если мы хотим получить и время:
Для конвертирования в timestamp используется метод с аналогичным названием:
Работа с часовыми поясами
К сожалению у меня нет большого опыта работы с часовыми поясами и примеры ниже не стоит рассматривать как лучшие практики.
Библиотека datetime не хранит часовые пояса, данные о переводах часов (летнее и зимнее время) и високосных секундах. К тому же, некоторые страны, могут изменить время опираясь на локальные ситуации. Эти ситуации опасны, когда идет запись в базу данных. Для вывода в GUI, можно использовать datetime.datetime.now() или высчитывать часовой пояс из базы.
Для записи в базу данных мы можем использовать время UTC и отдельно считать часовой пояс:
Следующий пример вычислит разницу времени между UTC и локальным. Насколько я знаю он может не сработать на версиях Python
Дата и время в Python – подробно о модуле datetime
Python предоставляет модуль datetime для работы с реальными датами и временем. Приложения функционируют в режиме настоящего времени, и Python позволяет нам запланировать запуск нашего скрипта Python в определенное время. В Python дата не является типом данных, но мы можем работать с объектами даты, импортировав модуль с именем datetime, time и calendar.
В этом разделе руководства мы обсудим, как работать с объектами даты и времени в Python.
Классы datetime подразделяются на шесть основных:
В Python время отсчитывается с 12 часов утра 1 января 1970 года. Функция time() модуля time возвращает общее количество тиков, потраченных с 12:00 1 января 1970 года. Tick можно рассматривать как наименьшую единицу измерения времени.
Рассмотрим следующий пример.
Как узнать текущее время?
Функции localtime() модуля времени используются для получения текущего кортежа времени. Рассмотрим следующий пример.
Кортеж времени
Время рассматривается как набор из 9 чисел. Давайте посмотрим на элементы временного кортежа.
Форматирование времени
Время можно отформатировать с помощью функции asctime() модуля времени. Он возвращает отформатированное время для переданного кортежа времени.
Время сна Python
Метод sleep() модуля time используется для остановки выполнения скрипта на заданный промежуток времени. Вывод будет задержан на количество секунд, указанное в качестве числа с плавающей запятой.
Рассмотрим следующий пример:
Модуль datetime
Модуль datetime позволяет нам создавать настраиваемые объекты даты, выполнять различные операции с датами, такие как сравнение и т. д.
Чтобы работать с датами как с объектами даты, мы должны импортировать модуль datetime в исходный код Python.
Рассмотрим следующий пример, чтобы получить представление об объекте datetime для текущего времени.
Создание объектов даты
Мы можем создавать объекты даты, минуя желаемую дату в конструкторе datetime, для которой должны быть созданы объекты даты.
Мы также можем указать время вместе с датой для создания объекта datetime. Рассмотрим следующий пример.
В приведенном выше коде мы последовательно передали в функцию datetime() атрибуты года, месяца, дня, часа, минуты и миллисекунды.
Сравнение двух дат
Мы можем сравнить две даты, используя такие операторы сравнения, как>,> =,
Класс date в Python
Класс date в Python является частью модуля datetime. Объект представляет дату (год, месяц и день) в календаре. 1 января года 1 называется днем номер 1, 2 января года 1 называется днем номер 2 и так далее.
Мы можем создать экземпляр даты, используя следующий заводской метод.
Все аргументы являются обязательными и должны быть целым числом в допустимом диапазоне.
Значение года должно находиться в диапазоне 1-9999, месяц – в диапазоне 1–12, а день – в диапазоне допустимых дней в данном месяце года.
Если аргумент формирует недопустимую дату, возникает ошибка ValueError.
Экземпляр
Мы можем создать экземпляр даты из фабричного метода.
Есть также несколько методов класса для создания экземпляра даты.
Создать сегодняшнюю дату
Создать дату из отметки времени
Создать дату из порядкового номера
Дата из строки ISO
В Python 3.7 добавлен новый метод fromisoformat() для создания экземпляра даты из строки формата ISO. Строка ввода должна быть в формате ГГГГ-ММ-ДД.
Атрибуты класса даты
Атрибуты экземпляра даты
Атрибуты экземпляра даты доступны только для чтения.
Операции с timedelta
Объект Date поддерживает арифметические операторы с экземпляром timedelta для создания будущих и прошлых дат.
Методы
Давайте посмотрим на некоторые методы экземпляра даты.
Замена (год = сам.год, месяц = сам.месяц, день = сам.день)
Возвращает экземпляр даты с тем же значением, если только его новое значение не предоставлено с помощью аргументов ключевого слова.
timetuple()
Вернуть экземпляр time.struct_time, как и time.localtime().
Обратите внимание, что значение часа, минут и секунд всегда будет 0, а флаг DST всегда будет –1.
toordinal()
Возвращает порядковое значение экземпляра даты.
weekday()
Верните день недели как целое число, где понедельник равен 0, а воскресенье – 6.
isoweekday()
Верните день недели как целое число, где понедельник равен 1, а воскресенье – 7.
isocalendar()
Возвращает кортеж (год ISO, номер недели ISO, день недели ISO).
Результат: (2018, 38, 2)
isoformat()
Вернуть строку, представляющую дату в формате ISO 8601, т.е. «ГГГГ-ММ-ДД».
ctime()
Возвращает строку, представляющую экземпляр даты.
Выход: Вт, 18 сен, 00:00:00 2018
Преобразование в форматированную строку
Мы можем использовать функцию strftime() для преобразования экземпляра даты в строку с указанным форматированием.
Преобразование строки в дату
Мы можем использовать функцию datetime strptime() для преобразования строки в экземпляр datetime. Затем мы можем использовать его функцию date() для преобразования в экземпляр даты.
Модуль datetime в Python
Статья посвящена работе с модулем datetime, который используется в языке программирования Python для определения даты и времени. В рамках изучения модуля будут рассмотрены классы Python date, Python time и Python timedelta.
Получение текущего времени и даты в Python
Сначала напишем пару простейших программ на Python.
В коде выше модуль datetime импортирован посредством import datetime, а одним из классов, который определен в модуле datetime, является одноименный класс datetime. Далее используется метод now, который создает в Python объект datetime. Этот объект содержит локальное время и дату на текущий момент (на момент отработки кода).
Выполнив этот код на Python, мы получим в выводе текущие дату и время. Это будет выглядеть приблизительно следующим образом:
Получаем только дату в Python. Работа с датой
Внеся небольшие изменения в код на Python, можно получить только дату (date).
Теперь для получения объекта date был задействован метод today, который определен в классе date. Это позволило получить объект date и отобразить локальную дату на момент запуска программы.
В итоге результат отображения даты в Python изменится:
Так как вы будете запускать этот код в другие дни (days), результат будет отличаться.
Что внутри datetime?
У модуля datetime есть атрибуты: time, timezone, tzinfo, timedelta и многие другие. Количество доступных атрибутов довольно велико, поэтому, чтобы увидеть все возможные данные (data), можно воспользоваться функцией dir:
Приблизительный вывод в Python:
На практике в Python чаще всего используют следующие классы модуля datetime:
Класс date
Объект date позволяет работать с датой:
a = datetime.date(2021, 1, 26)
То есть вывод даты будет соответствовать тому, что вы пропишете в коде:
Здесь date — конструктор класса date. Этот конструктор принимает 3 аргумента: год, месяц, день. Также присутствует переменная a — объект date.
Если надо получит текущую дату, используем уже знакомый метод today.
from datetime import date
print(«Какая сегодня дата:», today)
Вывод на момент проверки:
Какая сегодня дата: 2021-01-26
Также существует возможность создавать объекты date, используя метку времени — timestamp. Этот термин используется при обозначении времени POSIX — подразумевается число секунд, которые прошли с 00:00:00 UTC 1.01.1970 г. Для преобразования метки времени в дату в Python используют метод fromtimestamp.
Из объекта date можно без проблем получить текущие значения дня, года, месяца:
from datetime import date
print(«Какой сейчас год:», today.year)
print(«Какой сейчас месяц:», today.month)
print(«Какой сегодня день:», today.day)
Класс time
Экземпляр класса time отвечает за время, куда входит широкий спектр данных (data): и часы, и минуты, и секунды, и даже микросекунды.
Давайте опять передадим любые атрибуты, но чуть изменим код.
from datetime import time
Следует обратить внимание, что аргумент microsecond передан не был. В результате было присвоение дефолтное значение, равное нулю.
Класс datetime
Включает в себя информацию и о дате, и о времени.
Первые 3 аргумента обязательны для конструктора datetime — это year, month и day. Значения, которые отсутствуют, заполняются нулями.
Дополнительно можно прописать вывод метки времени:
Если же нужны значения текущего момента времени, получить его можно как посредством метода now, так и посредством метода today. В примере ниже задействован и now, и today:
Класс timedelta
Объект, называемый timedelta, позволяет получить разницу между 2-мя моментами времени. Вот, как это работает:
Приведем еще один пример с time delta:
Выше были созданы 2 timedelta-объекта — t1 и t2. Их разница и была выведена на экран.
Формат
Даты (dates), как и времена (times), могут быть представлены в разных странах по-разному. В США чаще применяют формат «MM/DD/YYYY» (months, days, years), в Соединенном Королевстве — «DD/MM/YYYY» (days, months, years). В языке программирования Python для работы с форматами существуют специальные методы: strftime и strptime.
Метод strftime определяется в классах time, date и datetime. Он позволит создать форматированную строку на основе заданного объекта.
Давайте отформатируем дату посредством strftime:
Если же надо преобразовать строку в объект datetime, используют уже strptime.
Обработка часового пояса
Представим, что мы работаем над проектом, в котором надо обеспечить отображение даты и времени с учетом от часового пояса пользователей. Получить нужные данные (data) и обработать часовой пояс можно самостоятельно, но лучше всего воспользоваться готовым модулем pytZ.
Что здесь что: datetime_NY и datetime_London представляют собой объекты datetime, которые содержат текущее время и дату соответствующего часового пояса. Как видите, ничего сложного.
Хотите получить самые новые знания про Python? Добро пожаловать на наши курсы!