|
1 | 1 | # ztime-cpp
|
2 | 2 | C ++ library for working with date and time
|
| 3 | + |
| 4 | + |
| 5 | +> boost::posix_time, std, boost ::chrono... надо учиться эффективно использовать чужие велосипеды, иначе легко завязнуть в своих... |
| 6 | +
|
| 7 | +Простая библиотека **C++** для работы с меткой времени (*timestamp*) и "понятной датой" (*human readable date*). Ранее библиотека называлась [xtime](https://github.com/NewYaroslav/xtime_cpp). Для совместимости с Visual Studio название было изменено. |
| 8 | +Библиотека поддерживает стандарты **C++11** и **C++14**. |
| 9 | + |
| 10 | +## Описание |
| 11 | + |
| 12 | +Данная библиотека представляет собой сборник алгоритмов, классов, функций и констант для удобной работы с веременем: |
| 13 | + |
| 14 | +* Измерение точного времени при помощи NTP |
| 15 | +* Получение реальноого времени компьютера с точностью до микросекунд |
| 16 | +* Преобразование даты в метку времени и обратно |
| 17 | +* Парсинг строк или формирование строки из даты |
| 18 | +* Расчет фаз Луны, поиск следующего новолуния |
| 19 | +* Преобразование UINX времени в OLE Automation Date и обратно |
| 20 | +* Получение секунды, минуты, часа дня из метки времени, получение последней метки времени месяца и т.п. |
| 21 | +* И многие другие возможности... |
| 22 | + |
| 23 | +Форматы времени, с которыми работает библиотека: |
| 24 | + |
| 25 | +* метка времени (*timestamp*) |
| 26 | +* юлианский день (*JD или JDN*) |
| 27 | +* дата автоматизации (*OADate*) |
| 28 | +* "понятная дата" (*human readable date*) |
| 29 | + |
| 30 | +Файлы *ztime.hpp*, *ztime_cpu_time.hpp*, *ztime_ntp.hpp* содежрат подробные комментарии. |
| 31 | + |
| 32 | +Для хранения и преобразования меток времени используется тип данных *uint64*, поэтому у данной библиотеки нет [проблемы 2038 года](https://en.wikipedia.org/wiki/Year_2038_problem) |
| 33 | + |
| 34 | +Примеры использования различных функций и классов можно найти в папке *code_blocks/test*. |
| 35 | + |
| 36 | +## Пример использования |
| 37 | + |
| 38 | +```cpp |
| 39 | +#include <iostream> |
| 40 | +#include "ztime_ntp.hpp" |
| 41 | +#include "ztime.hpp" |
| 42 | + |
| 43 | +int main() { |
| 44 | + ztime::ntp::init(); |
| 45 | + |
| 46 | + // Time synchronized with the Internet |
| 47 | + std::cout << "ntp timestamp (us): " << ztime::ntp::get_timestamp_us() << std::endl; |
| 48 | + std::cout << "ntp timestamp (s): " << ztime::ntp::get_timestamp() << std::endl; |
| 49 | + std::cout << "ntp timestamp (s): " << ztime::ntp::get_ftimestamp() << std::endl; |
| 50 | + std::cout << "ntp offset (us): " << ztime::ntp::get_offset_us() << std::endl; |
| 51 | + |
| 52 | + // Computer time |
| 53 | + std::cout << "pc timestamp (us): " << ztime::get_timestamp_us() << std::endl; |
| 54 | + std::cout << "pc timestamp (s): " << ztime::get_timestamp() << std::endl; |
| 55 | + std::cout << "pc timestamp (s): " << ztime::get_ftimestamp() << std::endl; |
| 56 | + |
| 57 | + // Date |
| 58 | + std::cout << "date: " << ztime::get_timestamp(17, 5, 2021) << std::endl; |
| 59 | + std::cout << "date: " << ztime::get_timestamp(17, 5, 2021, 11, 5, 50) << std::endl; |
| 60 | + |
| 61 | + DateTime iTime(12, 6, 2013, 15, 23, 01); |
| 62 | + iTime = DateTime("2013-12-06T15:23:01+00:00"); |
| 63 | + |
| 64 | + ztime::timestamp_t timestamp = iTime.get_timestamp(); |
| 65 | + |
| 66 | + // translating GMT time during CET |
| 67 | + DateTime iTimeCET(convert_gmt_to_cet(timestamp)); |
| 68 | + timestamp = iTimeCET.get_timestamp(); |
| 69 | + |
| 70 | + std::cout << "date: " << ztime::get_str_date_time(timestamp) << std::endl; |
| 71 | + |
| 72 | + |
| 73 | + // Julian day |
| 74 | + std::cout << "jd: " << ztime::get_julian_date(17.5, 5, 2021) << std::endl; |
| 75 | + std::cout << "jd: " << ztime::get_julian_date(17, 5, 2021, 11, 5, 50) << std::endl; |
| 76 | + std::cout << "jdn: " << ztime::get_julian_day_number(1, 1, 1970) << std::endl; |
| 77 | + |
| 78 | + // Moon Phase |
| 79 | + ztime::MoonPhase moon_phase; |
| 80 | + moon_phase.init(ztime::get_ftimestamp(18, 5, 2021, 0, 0,0)); |
| 81 | + |
| 82 | + std::cout << "age: " << moon_phase.age << std::endl; |
| 83 | + std::cout << "age_in_degrees: " << moon_phase.age_in_degrees << std::endl; |
| 84 | + std::cout << "phase: " << moon_phase.phase << std::endl; |
| 85 | + |
| 86 | + std::cout << "get_moon_phase: " << ztime::get_moon_phase(ztime::get_ftimestamp(18, 5, 2021, 0, 0, 0)) << std::endl; |
| 87 | + std::cout << "get_moon_phase: " << ztime::get_moon_phase_v2(ztime::get_ftimestamp(18, 5, 2021, 0, 0, 0)) << std::endl; |
| 88 | + std::cout << "get_moon_age: " << ztime::get_moon_age(ztime::get_ftimestamp(18, 5, 2021, 0, 0,0)) << std::endl; |
| 89 | + |
| 90 | + return 0; |
| 91 | +} |
| 92 | + |
| 93 | +``` |
| 94 | + |
| 95 | +## Как установить? |
| 96 | + |
| 97 | +Просто добавьте файл *ztime.cpp* в свой проект. Подключите заголовочный файл *ztime.hpp*, а также, если нужно, *ztime_cpu_time.hpp*, *ztime_ntp.hpp*. |
| 98 | + |
| 99 | +Подробности использования смотрите в **DESCRIPTION.md** |
0 commit comments