Модуль datetime

Модуль datetime предоставляет классы для обработки времени и даты разными способами. Поддерживается и стандартный способ представления времени, однако больший упор сделан на простоту манипулирования датой, временем и их частями.
Классы, предоставляемые модулем datetime:
Класс datetime.date(year, month, day) — стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.
Класс datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) — стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.
Класс datetime.timedelta — разница между двумя моментами времени, с точностью до микросекунд.
Класс datetime.tzinfo — абстрактный базовый класс для информации о временной зоне (например, для учета часового пояса и / или летнего времени).
Класс datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) — комбинация даты и времени.
- datetime.MINYEAR (1) ≤ year ≤ datetime.MAXYEAR (9999)
- 1 ≤ month ≤ 12
- 1 ≤ day ≤ количество дней в данном месяце и году
Методы класса datetime:
datetime.today() — объект datetime из текущей даты и времени. Работает также, как и datetime.now() со значением tz=None.
datetime.fromtimestamp(timestamp) — дата из стандартного представления времени.
datetime.fromordinal(ordinal) — дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
datetime.now(tz=None) — объект datetime из текущей даты и времени.
datetime.combine(date, time) — объект datetime из комбинации объектов date и time.
datetime.strptime(date_string, format) — преобразует строку в datetime (так же, как и функция strptime из модуля time).
datetime.strftime(format) — см. функцию strftime из модуля time.
datetime.date() — объект даты (с отсечением времени).
datetime.time() — объект времени (с отсечением даты).
datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) — возвращает новый объект datetime с изменёнными атрибутами.
datetime.timetuple() — возвращает struct_time из datetime.
datetime.toordinal() — количество дней, прошедших с 01.01.1970.
datetime.timestamp() — возвращает время в секундах с начала эпохи.
datetime.weekday() — день недели в виде числа, понедельник — 0, воскресенье — 6.
datetime.isoweekday() — день недели в виде числа, понедельник — 1, воскресенье — 7.
datetime.isocalendar() — кортеж (год в формате ISO, ISO номер недели, ISO день недели).
datetime.isoformat(sep=’T’) — красивая строка вида «YYYY-MM-DDTHH:MM:SS.mmmmmm» или, если microsecond == 0, «YYYY-MM-DDTHH:MM:SS»
datetime.ctime() — см. ctime() из модуля time.
Пример работы с классом datetime:
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Как получить дату в нужном формате?
Функция datetime.strptime() парсит строку с датой/временем и возвращает объект типа datetime.datetime . При попытке вывести его на печать при помощи функции print(startdate) сначала вызывается метод startdate.__str__() , который по умолчанию преобразует datetime.datetime объект в строку используя формат 'Y%-%m-%d %H:%M:%S' . Поэтому вы получаете вывод в этом формате.
In [231]: startdate = datetime.strptime('25.05.2021', '%d.%m.%Y') In [232]: print(startdate) 2021-05-25 00:00:00 In [233]: startdate.__str__() Out[233]: '2021-05-25 00:00:00' In [234]: startdate Out[234]: datetime.datetime(2021, 5, 25, 0, 0) In [235]: startdate.__repr__() Out[235]: 'datetime.datetime(2021, 5, 25, 0, 0)'
Для того чтобы преобразовать объект datetime.datetime в строку нужного формата можно воспользоваться методом datetime.strftime() :
In [236]: startdate.strftime("%d.%m.%Y") Out[236]: '25.05.2021'
или воспользоваться продвинутым форматированием строк ( f-string ):
In [240]: f"" Out[240]: '25.05.2021'
или обычным форматированием:
In [242]: "".format(startdate) Out[242]: '25.05.2021'
UPD: метод qsstats.time_series() , о котором вы ничего не сказали в вопросе ожидает в качестве входных параметров объекты типа datetime.datetime :
values = qsstats.time_series(startdate, enddate)
Текущая дата и время в Python
Время и дата играют важнейшую роль при решении определенных задач в программировании. Разработчику на Python приходится нередко использовать точные значения текущей (current) даты, к примеру, при сохранении информации в базе данных, вычислениях, регистрации, обеспечении доступа и т. д. В этой статье пойдет разговор о том, как узнать текущие временные значения с помощью модуля datetime. Вдобавок к этому, читатель узнает о временных настройках для разных часовых поясов и преобразовании объектов datetime в метки времени Unix.
Получаем текущую дату и время
Datetime включает в себя разные классы, позволяющие получать нужные временные данные:
- datetime.date: день, месяц и год;
- datetime.time: время в часах, минутах, секундах, а также микросекундах. Тут дата значения не имеет;
- datetime.datetime: здесь хранятся атрибуты date и time.
Для примера можно вывести в терминал текущую (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.

Тут все понятно и просто. Но есть нюанс: если надо получить день недели, прописывают 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
Мы можем использовать модуль datetime в Python, чтобы получить текущую дату и время в локальной системе.
from datetime import datetime # Current date time in local system print(datetime.now())
Выход: 2018-09-12 14: 17: 56.456080
Текущая дата
Если вас интересует только дата в локальной системе, вы можете использовать метод datetime date().
print(datetime.date(datetime.now()))
Текущее время
Если вам нужно только время в локальной системе, используйте метод time(), передав объект datetime в качестве аргумента.
print(datetime.time(datetime.now()))
Выход: 14: 19: 46.423440
Текущая дата и время в часовом поясе – pytz
В большинстве случаев нам нужна дата в определенном часовом поясе, чтобы ее могли использовать и другие. Функция datetime now() в Python принимает аргумент часового пояса, который должен быть реализацией абстрактного базового класса tzinfo.
pytz – один из популярных модулей, который можно использовать для получения реализаций часового пояса.
Вы можете установить этот модуль, используя следующую команду PIP.
pip install pytz
Давайте рассмотрим несколько примеров использования модуля pytz для получения времени в определенных часовых поясах.
import pytz utc = pytz.utc pst = pytz.timezone('America/Los_Angeles') ist = pytz.timezone('Asia/Calcutta') print('Current Date Time in UTC =', datetime.now(tz=utc)) print('Current Date Time in PST =', datetime.now(pst)) print('Current Date Time in IST =', datetime.now(ist))
Current Date Time in UTC = 2018-09-12 08:57:18.110068+00:00 Current Date Time in PST = 2018-09-12 01:57:18.110106-07:00 Current Date Time in IST = 2018-09-12 14:27:18.110139+05:30
Если вы хотите узнать все поддерживаемые строки часовых поясов, вы можете распечатать эту информацию, используя следующую команду.
print(pytz.all_timezones)
Он напечатает список всех часовых поясов, поддерживаемых модулем pytz.
Модуль Pendulum
Модуль Pendulum в Python – это еще одна библиотека часовых поясов, и, согласно ее документации, она быстрее модуля pytz.
Мы можем установить модуль Pendulum, используя команду PIP ниже.
pip install pendulum
Вы можете получить список поддерживаемых строк часовых поясов из атрибута pendulum.timezones.
Давайте рассмотрим несколько примеров получения информации о текущей дате и времени в разных часовых поясах с помощью модуля маятника.
import pendulum utc = pendulum.timezone('UTC') pst = pendulum.timezone('America/Los_Angeles') ist = pendulum.timezone('Asia/Calcutta') print('Current Date Time in UTC =', datetime.now(utc)) print('Current Date Time in PST =', datetime.now(pst)) print('Current Date Time in IST =', datetime.now(ist))
Current Date Time in UTC = 2018-09-12 09:07:20.267774+00:00 Current Date Time in PST = 2018-09-12 02:07:20.267806-07:00 Current Date Time in IST = 2018-09-12 14:37:20.267858+05:30