Библиотека 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
Класс 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