Skip to content

NewYaroslav/ztime-cpp

Folders and files

NameName
Last commit message
Last commit date
Feb 25, 2023
Sep 28, 2021
Feb 25, 2023
Sep 13, 2021
Feb 20, 2023
Sep 11, 2021
Oct 7, 2021

Repository files navigation

ztime-cpp

C ++ library for working with date and time

logo

boost::posix_time, std, boost ::chrono... надо учиться эффективно использовать чужие велосипеды, иначе легко завязнуть в своих...

Ztime это простая C++ библиотека для работы с меткой времени (timestamp) и "понятной датой" (human readable date). Ранее библиотека называлась xtime. Для совместимости с Visual Studio название было изменено. Библиотека поддерживает стандарты C++11 и C++14.

Описание

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

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

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

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

Файлы ztime.hpp, ztime_cpu_time.hpp, ztime_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;
}

Как установить?

Просто добавьте файл ztime.cpp в свой проект. Подключите заголовочный файл ztime.hpp, а также, если нужно, ztime_cpu_time.hpp, ztime_ntp.hpp.

Подробности использования смотрите в DESCRIPTION.md