Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,20 @@ jobs:
run: cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=./vcpkg/scripts/buildsystems/vcpkg.cmake
- name: Build consumer project
run: cmake --build build

install-no-ntp:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configure without NTP
run: cmake -S . -B build -DTIME_SHIELD_CPP_BUILD_TESTS=ON -DTIME_SHIELD_ENABLE_NTP_CLIENT=OFF -DCMAKE_CXX_STANDARD=11
- name: Build without NTP
run: cmake --build build
- name: Test without NTP
run: ctest --test-dir build --output-on-failure
- name: Install without NTP
run: cmake --install build --prefix install
- name: Configure installed consumer
run: cmake -S tests/install_consumer -B build-consumer -DCMAKE_PREFIX_PATH=${{ github.workspace }}/install -DCMAKE_CXX_STANDARD=11
- name: Build installed consumer
run: cmake --build build-consumer
11 changes: 11 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,17 @@ Global rules:

Additional policy:

- Public C++ headers are organized by domain under `include/time_shield`.
Prefer domain umbrellas (`core.hpp`, `conversions.hpp`, `text.hpp`,
`date_time.hpp`, `timezone.hpp`, `astronomy.hpp`, `timers.hpp`, and
optional `ntp.hpp`) for cross-domain includes. Same-domain leaf includes may
use local paths. Do not use `../` includes or include another domain's leaf
header directly. Root-level compatibility headers and documented legacy
paths are forwarding shells and are exempt from the domain dependency rule.
- Keep domain dependencies acyclic: lower-level domains must not include
higher-level domain headers. Detail headers belong to their owning domain
and are not public cross-domain dependencies.

- For reusable `.hpp` / `.ipp` / `.tpp` ownership and include-structure policy, prefer:
- developer doc: `docs/header-implementation-guidelines.md`
- agent playbook: `agents/header-implementation-guidelines.md`
Expand Down
27 changes: 26 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,14 @@ install(TARGETS time_shield EXPORT TimeShieldTargets
if(TIME_SHIELD_ENABLE_NTP_CLIENT)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
else()
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN "ntp_client*" EXCLUDE)
install(
DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
PATTERN "ntp" EXCLUDE
PATTERN "ntp.hpp" EXCLUDE
PATTERN "ntp_client*" EXCLUDE
PATTERN "ntp_time_service.hpp" EXCLUDE
)
endif()
install(
EXPORT TimeShieldTargets
Expand Down Expand Up @@ -102,6 +109,12 @@ endif()

if(TIME_SHIELD_CPP_BUILD_TESTS)
enable_testing()
add_test(
NAME header_include_policy
COMMAND ${CMAKE_COMMAND}
-DTIME_SHIELD_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_header_include_policy.cmake
)
file(GLOB TEST_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} tests/*.cpp)
foreach(test_src ${TEST_SOURCES})
get_filename_component(test_name ${test_src} NAME_WE)
Expand All @@ -113,5 +126,17 @@ if(TIME_SHIELD_CPP_BUILD_TESTS)
add_test(NAME ${test_name} COMMAND ${test_name})
endforeach()

file(GLOB HEADER_SMOKE_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} tests/header_smoke/*.cpp)
foreach(test_src ${HEADER_SMOKE_SOURCES})
get_filename_component(test_name ${test_src} NAME_WE)
set(target_name header_smoke_${test_name})
add_executable(${target_name} ${test_src})
target_link_libraries(${target_name} PRIVATE time_shield::time_shield)
if(COMMON_WARN_FLAGS)
target_compile_options(${target_name} PRIVATE ${COMMON_WARN_FLAGS})
endif()
add_test(NAME ${target_name} COMMAND ${target_name})
endforeach()

add_subdirectory(tests/odr)
endif()
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/DateTime.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATETIME_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATETIME_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_DATETIME_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_DATETIME_MQH_INCLUDED

/// \file DateTime.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -149,4 +149,4 @@ namespace time_shield {

} // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATETIME_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_DATETIME_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/constants.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_CONSTANTS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_CONSTANTS_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_CONSTANTS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_CONSTANTS_MQH_INCLUDED

/// \file constants.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -172,4 +172,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_CONSTANTS_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_CONSTANTS_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/date_struct.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATE_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATE_STRUCT_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_DATE_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_DATE_STRUCT_MQH_INCLUDED

/// \file date_struct.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -44,4 +44,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATE_STRUCT_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_DATE_STRUCT_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/date_time_struct.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATE_TIME_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATE_TIME_STRUCT_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_DATE_TIME_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_DATE_TIME_STRUCT_MQH_INCLUDED

/// \file date_time_struct.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -64,4 +64,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATE_TIME_STRUCT_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_DATE_TIME_STRUCT_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/enums.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_ENUMS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_ENUMS_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_ENUMS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_ENUMS_MQH_INCLUDED

/// \file enums.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -226,4 +226,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_ENUMS_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_ENUMS_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/initialization.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_INITIALIZATION_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_INITIALIZATION_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_INITIALIZATION_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_INITIALIZATION_MQH_INCLUDED

/// \file initialization.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -35,4 +35,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_INITIALIZATION_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_INITIALIZATION_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/time_conversions.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_CONVERSIONS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_CONVERSIONS_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_CONVERSIONS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_CONVERSIONS_MQH_INCLUDED

/// \file time_conversions.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -1559,4 +1559,4 @@ double sec_to_fhour(long sec) {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_CONVERSIONS_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_TIME_CONVERSIONS_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/time_formatting.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_FORMATTING_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_FORMATTING_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_FORMATTING_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_FORMATTING_MQH_INCLUDED

/// \file time_formatting.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -483,4 +483,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_FORMATTING_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_TIME_FORMATTING_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/time_parser.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_PARSER_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_PARSER_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_PARSER_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_PARSER_MQH_INCLUDED

/// \file time_parser.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -690,4 +690,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_PARSER_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_TIME_PARSER_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/time_struct.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_STRUCT_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_STRUCT_MQH_INCLUDED

/// \file time_struct.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -52,4 +52,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_STRUCT_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_TIME_STRUCT_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/time_utils.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_UTILS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_UTILS_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_UTILS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_UTILS_MQH_INCLUDED

/// \file time_utils.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -112,4 +112,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_UTILS_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_TIME_UTILS_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/time_zone_conversions.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_ZONE_CONVERSIONS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_ZONE_CONVERSIONS_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_ZONE_CONVERSIONS_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_ZONE_CONVERSIONS_MQH_INCLUDED

/// \file time_zone_conversions.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -445,4 +445,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_ZONE_CONVERSIONS_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_TIME_ZONE_CONVERSIONS_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/time_zone_struct.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_ZONE_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_ZONE_STRUCT_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_ZONE_STRUCT_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_ZONE_STRUCT_MQH_INCLUDED

/// \file time_zone_struct.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -138,4 +138,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_TIME_ZONE_STRUCT_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_TIME_ZONE_STRUCT_MQH_INCLUDED
6 changes: 3 additions & 3 deletions MQL5/Include/time_shield/validation.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
//| Copyright 2025, NewYaroslav |
//| https://github.com/NewYaroslav/time-shield-cpp |
//+------------------------------------------------------------------+
#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_VALIDATION_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_VALIDATION_MQH_INCLUDED
#ifndef TIME_SHIELD_MQL5_HEADER_VALIDATION_MQH_INCLUDED
#define TIME_SHIELD_MQL5_HEADER_VALIDATION_MQH_INCLUDED

/// \file validation.mqh
/// \ingroup mql5
Expand Down Expand Up @@ -303,4 +303,4 @@ namespace time_shield {

}; // namespace time_shield

#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_VALIDATION_MQH_INCLUDED
#endif // TIME_SHIELD_MQL5_HEADER_VALIDATION_MQH_INCLUDED
29 changes: 22 additions & 7 deletions README-RU.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,21 @@ bool monday = is_workday(now);
Используйте `#include <time_shield.hpp>` для полного API или подключайте
отдельные заголовки для минимальной сборки.

Публичные заголовки сгруппированы по доменам. Для целевого подключения
рекомендуются следующие umbrella-заголовки:

- `time_shield/core.hpp` — базовые типы, структуры, проверки и утилиты;
- `time_shield/conversions.hpp` — преобразования временных и календарных значений;
- `time_shield/text.hpp` — разбор и форматирование;
- `time_shield/date_time.hpp` — тип `DateTime`;
- `time_shield/timezone.hpp` — именованные зоны и фиксированные смещения;
- `time_shield/astronomy.hpp` — Julian- и лунные helper-ы;
- `time_shield/timers.hpp` — таймеры и планировщик;
- `time_shield/ntp.hpp` — необязательные NTP-клиент и сервис времени.

Прежние пути корневых заголовков сохраняются как compatibility-forwarders.
Переход на доменные пути не требует изменения имён API.

## Зачем Time Shield?

**Time Shield** создавался как практичный инструмент для работы с временем в C++, ориентированный на прикладные и инженерные задачи. В отличие от стандартной `std::chrono` или более академичных решений вроде `HowardHinnant/date`, библиотека:
Expand Down Expand Up @@ -57,7 +72,7 @@ bool monday = is_workday(now);

## Конфигурация

Компиляционные флаги в `time_shield/config.hpp` позволяют адаптировать библиотеку под платформу и отключать необязательные модули:
Компиляционные флаги в `time_shield/core/config.hpp` позволяют адаптировать библиотеку под платформу и отключать необязательные модули:

- `TIME_SHIELD_PLATFORM_WINDOWS` / `TIME_SHIELD_PLATFORM_UNIX` — определение целевой платформы.
- `TIME_SHIELD_HAS_WINSOCK` — наличие WinSock API.
Expand Down Expand Up @@ -287,7 +302,7 @@ ts_ms_t tokyo_local_ms = ntp_tokyo.local_time_ms();
Преобразования OA совместимы с Excel/COM (базовая дата 1899-12-30), выполняются в UTC и корректно обрабатывают специальную семантику отрицательных дробных OA serials до базовой даты.

```cpp
#include <time_shield/ole_automation_conversions.hpp>
#include <time_shield/conversions/ole_automation_conversions.hpp>

using namespace time_shield;

Expand All @@ -302,8 +317,8 @@ oadate_t from_parts = to_oadate(2024, Month::MAY, 2, 12, 0); // 2024-05-02 12:00
Хелперы Julian Date используют пролептический григорианский календарь и ориентированы на аналитические значения (JD, MJD, JDN), а не на высокоточные эфемериды. Лунные helper-ы по-прежнему доступны через astronomy entry header.

```cpp
#include <time_shield/julian_conversions.hpp>
#include <time_shield/astronomy_conversions.hpp>
#include <time_shield/astronomy/julian_conversions.hpp>
#include <time_shield/astronomy/astronomy_conversions.hpp>

using namespace time_shield;

Expand Down Expand Up @@ -331,7 +346,7 @@ bool is_near_new = is_new_moon_window(fts()); // попадание в окно
> - видимость (первый серп/наблюдаемость) — уже про атмосферу/высоту над горизонтом и т.п.

```cpp
#include <time_shield/MoonPhase.hpp>
#include <time_shield/astronomy/MoonPhase.hpp>

using namespace time_shield;

Expand Down Expand Up @@ -364,8 +379,8 @@ ts_t myt = convert_time_zone(ist, TimeZone::IST, TimeZone::MYT);
### NTP‑клиент, пул и сервис времени

```cpp
#include <time_shield/ntp_client_pool.hpp>
#include <time_shield/ntp_time_service.hpp>
#include <time_shield/ntp/ntp_client_pool.hpp>
#include <time_shield/ntp/ntp_time_service.hpp>

using namespace time_shield;

Expand Down
Loading
Loading