Кратко о библиотеке DateTime в Python

Библиотека DateTime и ее класс DateTime используются в алготрейдинге практически всегда. Ведь любая сделка, любая свечка(бар) так или иначе завязаны на временные показатели.

DataTime

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

Наиболее востребованы следующие классы модуля:

  • date – простая дата, содержит год, месяц и день
  • time – время в течение дня, содержит часы, минуты, секунды и микросекунды
  • datetime – комбинация полной даты и времени
  • timedelta – промежуток времени, разность между двумя датами/временами
  • tzinfo – абстрактный класс для представления информации о часовом поясе
  • timezone – реализация tzinfo, представляет смещение от UTC

Нам достаточно сейчас остановиться на классах date, time, datetime и timedelta, которые решают общие задачи по работе с временем при разработке различных приложений.

 

В начале файла вашего скрипта обязательно импортируйте библиотеку datetime, а чтобы сократить запись в коде нашей программы импортируем сразу все необходимые нам классы:

from datetime import date, datetime, time, timedelta
Таким образом мы сможем в тексте сократить записи, к примеру вместо “datetime.date.today()” писать просто “date.today()”

Класс date

создадим объект даты

import datetime
d = datetime.date(2023, 12, 5) #2023-01-15

можно узнать текущую дату:

d = date.today() #2023-12-05

можно получить компоненты даты:

print(d.year) # 2023
print(d.month) # 12
print(d.day) # 5

Класс time

Класс time из модуля datetime в Python предназначен для работы со временем.

Создадим объект времени:

t = time(14, 20, 55) #14:20:55

Получим компоненты времени:

print(t.hour) # 14
print(t.minute) # 20 
print(t.second) # 55

Сравним два времени:

tt = time(12, 0, 0)
print(tt < t) # True

Класс datetime

Наиболее часто используемый класс

Создадим объект даты и времени

dt = datetime(2023, 12, 5, 11, 10, 5) #2023-12-05 11:10:05

Получим компоненты даты/времени:

print(dt.year) # 2023
print(dt.month) # 12
print(dt.day)# 5
print(dt.hour) # 11
print(dt.minute) # 10
print(dt.second) # 5

 

Получение текущей даты и времени/
Метод datetime.now() возвращает объект datetime, с текущей датой и временем.

При вызове без аргументов – возвращает локальную дату и время:

d = datetime.datetime.now()
print(d)
print(d.year) # только год 2023
print(d.month) # только месяц 12
print(d.day) # только день 5
print(d.hour) # только час 14
print(d.minute) # только минута 30
print(d.second) # только секунда 45
print(d.microsecond) # только микросекунда 0

Класс timedelta()

timedelta() представляет собой продолжительность промежутка времени, по сути это интервал времени. Аргумент может быть выражен в weeks, days, hours, minutes, seconds, microseconds, milliseconds.

Создадим объект

td = timedelta(weeks=1, days=1, hours=1, minutes=1, seconds=1, milliseconds=1, microseconds=1)
# 8 days, 1:01:01.001001

Вычитание двух дат возвращает timedelta

d = datetime.now()
dd = d + timedelta(days=1, minutes=1)
print(type(dd)) # <class 'datetime.datetime'>
print(type(d)) # <class 'datetime.datetime'>
xxx = dd - d
print(type(xxx)) # !!! <class 'datetime.timedelta'>
print(xxx) # 1 day, 0:01:00

Правильным будет также вычитание дат явным конструированием timedelta

xxxx = (timedelta(days=(dd-d).days,seconds = (dd-d).seconds))
print(xxxx) # 1 day, 0:01:00
print(type(xxxx)) <class 'datetime.timedelta'>

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

xxx = dd + d
# TypeError: unsupported operand type(s) for +: 'datetime.date' and 'datetime.date'

timedelta имеет метод total_seconds() – количество секунд в интервале времени.
Метод total_seconds() полезен для случаев, когда нужно преобразовать timedelta в секунды:

period = timedelta(days=2, hours=5)
period_sec = period.total_seconds() 
print(period_sec) # период 2 дня 5 часов в секундах равен 190800.0

Также метод total_seconds() можно использовать, когда надо найти разницу между датой (временем) в секундах:

seconds = (dd-d).total_seconds()
print(seconds) # output
86460.0

Форматирование объектов даты и времени

Модуль datetime предоставляет гибкие возможности по форматированию объектов даты и времени при выводе в виде строк.

Для преобразования объекта даты/времени – в “человекочитаемую” строку используется метод strftime().

Основной синтаксис:

datetime_object.strftime(format) возвращает отформатированную дату/время как строку. Здесь format задает желаемый формат с помощью специальных символов-заполнителей:
%A – полное текстовое название дня недели
%B – полное текстовое название месяца
%b – сокращенное название месяца
%d – день
%m – месяц
%Y – год из 4 цифр
%y – только последние 2 цифры года
%H – часы
%M – минуты
%S – секунды

Комбинируя заполнители, можно гибко настроить нужный вывод даты и времени. Например:

date.today().strftime("%A, %d %B %Y") # Tuesday, 05 December 2023

Чтобы вывести отформатировать дату с полным названием дня недели и месяца на русском языке в Python, нужно использовать библиотеку locale

import locale
locale.setlocale(locale.LC_ALL, 'ru_RU')

print(datetime.date.today().strftime("%A, %d %B"))
# вторник, 05 Декабрь

Для решения противоположной задачи – для преобразования строки в объект даты/времени используется метод strptime().

Итак, функция strptime() в модуле datetime в Python используется для преобразования строки даты и времени в объект datetime по заданному формату.

Например:

date_str = "20.01.2023 15:00:00" # строка с датой и временем
print(type(date_str)) # <class 'str'>
datetime_object = datetime.strptime(date_str, "%d.%m.%Y %H:%M:%S")
print(datetime_object) # 2023-01-20 15:00:00
print(type(datetime_object)) # <class 'datetime.datetime'>

На этом все. Материала для начала работы более, чем достаточно. Еще раз посмотрите самое главное: классы datetime(), timedelta() и функции strftime(), strptime().


Дополнение от 08.01.2024

Unix-время

Время Unix – это способ представления времени в операционных системах Unix и подобных им. Оно представляет собой количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC (Coordinated Universal Time).

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

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

В языке программирования Python, модуль datetime предоставляет способ преобразования Unix-времени в формат datetime, который более удобен для работы с датами и временем.

Метод datetime.fromtimestamp() является статическим методом класса datetime в модуле datetime в Python. Он преобразует Unix время (представленное в виде количества секунд, прошедших с 1 января 1970 года) в объект datetime

import datetime


unix_time=1704727583
datetime_obj=datetime.datetime.fromtimestamp(unix_time)

print(datetime_obj) #2024-01-08 18:26:23

Оцените статью
Репост в TG и VK
Алготрейдинг шаг за шагом. Создай торгового робота на Python с нуля по нашим урокам. Автоматизируй торговлю на бирже по собственной стратегии.