Блог им. elektroyar

Библиотека для работы с временем и датой ztime

 С++ библиотека для работы с датой и временем Z-time

Библиотека для работы с временем и датой ztime

Всем привет! Ранее я уже писал про библиотеку для работы с датой и временем. С тех пор я добавил в нее новый функционал и адаптировал под использование в VS (оказалось, что в VS имя xtime уже занято). Эта библиотека очередной велосипед, но что поделать, люблю делать велосипеды
boost::posix_time, std, boost ::chrono… надо учиться эффективно использовать чужие велосипеды, иначе легко завязнуть в своих...

В трейдинге данная библиотека может быть полезна, если нужно измерять точное время в программе при помощи NTP без корректировки времени самого сервера/ПК, для проверки взаимосвязи настроения рынка с фазами Луны, для различных преобразований времени в разные форматы.


Описание


Данная библиотека представляет собой сборник алгоритмов, классов, функций и констант для удобной работы с временем:

  • Измерение точного времени при помощи NTP
  • Получение реального времени компьютера с точностью до микросекунд
  • Преобразование даты в метку времени и обратно
  • Парсинг строк или формирование строки из даты
  • Расчет фаз Луны, поиск следующего новолуния
  • Преобразование UINX времени в OLE Automation Date и обратно
  • Получение секунды, минуты, часа дня из метки времени, получение последней метки времени месяца и т.п.
  • И многие другие возможности...

Форматы времени, с которыми работает библиотека:

  • метка времени (timestamp)
  • юлианский день (JD или JDN)
  • дата автоматизации (OADate)
  • «понятная дата» (human readable date)

Файлы ztime.hppztime_cpu_time.hppztime_ntp.hpp содержат подробные комментарии.

Для хранения и преобразования меток времени используется тип данных uint64, поэтому у данной библиотеки нет проблемы 2038 года

Примеры использования различных функций и классов можно найти в папке code_blocks/test.

 

Пример использования
#include <iostream>
#include "ztime_ntp.hpp"
#include "ztime.hpp"

int main() {
    ztime::ntp::init();
	
    // Time synchronized with the Internet
    std::cout << "ntp timestamp (us): " << ztime::ntp::get_timestamp_us() << std::endl;
    std::cout << "ntp timestamp  (s): " << ztime::ntp::get_timestamp() << std::endl;
    std::cout << "ntp timestamp  (s): " << ztime::ntp::get_ftimestamp() << std::endl;
    std::cout << "ntp offset    (us): " << ztime::ntp::get_offset_us() << std::endl;
	
    // Computer time
    std::cout << "pc  timestamp (us): " << ztime::get_timestamp_us() << std::endl;
    std::cout << "pc  timestamp  (s): " << ztime::get_timestamp() << std::endl;
    std::cout << "pc  timestamp  (s): " << ztime::get_ftimestamp() << std::endl;
	
    // Date
    std::cout << "date: " << ztime::get_timestamp(17, 5, 2021) << std::endl;
    std::cout << "date: " << ztime::get_timestamp(17, 5, 2021, 11, 5, 50) << std::endl;
	
    DateTime iTime(12, 6, 2013, 15, 23, 01);
    iTime = DateTime("2013-12-06T15:23:01+00:00");
	
    ztime::timestamp_t timestamp = iTime.get_timestamp();
	
    // translating GMT time during CET
    DateTime iTimeCET(convert_gmt_to_cet(timestamp));
    timestamp = iTimeCET.get_timestamp();
	
    std::cout << "date: " << ztime::get_str_date_time(timestamp) << std::endl;
	
	
    // Julian day
    std::cout << "jd: " << ztime::get_julian_date(17.5, 5, 2021) << std::endl;
    std::cout << "jd: " << ztime::get_julian_date(17, 5, 2021, 11, 5, 50) << std::endl;
    std::cout << "jdn: " << ztime::get_julian_day_number(1, 1, 1970) << std::endl;

    // Moon Phase
    ztime::MoonPhase moon_phase;
    moon_phase.init(ztime::get_ftimestamp(18, 5, 2021, 0, 0,0));
	
    std::cout << "age: " << moon_phase.age << std::endl;
    std::cout << "age_in_degrees: " << moon_phase.age_in_degrees << std::endl;
    std::cout << "phase: " << moon_phase.phase << std::endl;

    std::cout << "get_moon_phase: " << ztime::get_moon_phase(ztime::get_ftimestamp(18, 5, 2021, 0, 0, 0)) << std::endl;
    std::cout << "get_moon_phase: " << ztime::get_moon_phase_v2(ztime::get_ftimestamp(18, 5, 2021, 0, 0, 0)) << std::endl;
    std::cout << "get_moon_age: " << ztime::get_moon_age(ztime::get_ftimestamp(18, 5, 2021, 0, 0,0)) << std::endl;
	
    return 0;
}

 
Репозиторий тут

587 | ★1
7 комментариев
Я сначала подумал, что про Луну это шутка ))
avatar
Андрей К, 
фазы Луны это круто. Где бы взять какой-нибудь простецкий csv или xls файл с этими данными. А еще бы файл такого же типа, но с актуальным переводом американского времени в наше российское. И все это года с 2015 по н.в.
А хипстеры все делают какие-то ни разу не практичные вещи на 
Дмитрий Овчинников, я на фазы луны обращал внимание примерно в 2013-2014, тогда еще Василий как то публично сказал, что в полнолуние рынки разворачиваются, что действительно было так ) потом забросил
avatar
Андрей К, 
а у меня все руки не доходят до тестов, все данных в нормальном виде нет, а мастерить лень :)
Хотя в книжке https://smart-lab.ru/books/encyclopedia-torgovyh-strategiy/ говорят, что не работает, так у них там ничего не работает, с таким то подходом.

Дмитрий Овчинников, я раньше очень много данных для тестов добывал путем парсинга сайтов. Достаточно интересные задачки. Есть даже парсер смартлаба, у меня все пользователи пересчитаны и загнаны в базу )
avatar
Андрей К, 
так ты программист и айтишник, тебе проще. А мне для любого такого действия надо ОЧЕНЬ сильно напрягаться, я лучше в других местах понапрягаюсь, это будет более эффективно.
Дмитрий Овчинников, логично ) напрягаться нужно там, где эффективнее 
avatar

Читайте на SMART-LAB:
Фото
Встречаемся на Smart-Lab & Cbonds PRO облигации 2026
Встречаемся на Smart-Lab & Cbonds PRO облигации 2026 💼 Уже в эту субботу, 28 февраля , в Москве пройдёт конференция по вопросам...
Фото
Портфель с ежемесячными поступлениями. Февраль 2026
В сентябре прошлого года сформировали портфель облигаций с ежемесячными купонами. Посмотрим, как изменилась ситуация на рынке, и актуализируем...
Займер спас от мошенников почти миллиард рублей
🥷 За прошлый год служба безопасности Займера выявила и заблокировала более 165 тысяч заявок на займы от мошенников, что помогло компании...
Фото
Какие юаневые облигации можно приобрести на фоне ужесточения бюджетного правила?

теги блога elektroyar

....все тэги



UPDONW
Новый дизайн