Для конвертации между steady_clock::time_point
и system_clock::time_point
в C++, вам потребуется использовать классы std::chrono::time_point
и функции преобразования, предоставляемые библиотекой <chrono>
.
steady_clock
и system_clock
- это два разных типа часов, предоставляемых стандартной библиотекой <chrono>
. steady_clock
представляет собой монотонные часы, которые гарантируют фиксированную единицу измерения времени, в то время как system_clock
представляет системные часы, которые зависят от системного времени и временной зоны.
Для конвертации steady_clock::time_point
в system_clock::time_point
, вам потребуется выполнить следующие шаги:
- Получите текущее время
steady_clock
с помощью функцииsteady_clock::now()
:
std::chrono::steady_clock::time_point steady_time = std::chrono::steady_clock::now();
- Создайте
system_clock::duration
, представляющую разницу между текущим временемsteady_clock
и начальным временемsteady_clock
(обычно это время начала программы):
std::chrono::steady_clock::duration steady_duration = steady_time - start_time; // start_time - время начала программы
- Преобразуйте
steady_duration
вsystem_clock::duration
с использованием функцииstd::chrono::duration_cast
:
std::chrono::system_clock::duration system_duration = std::chrono::duration_cast<std::chrono::system_clock::duration>(steady_duration);
- Создайте
system_clock::time_point
, добавивsystem_duration
к начальному времениsystem_clock
:
std::chrono::system_clock::time_point system_time = start_time + system_duration;
Теперь у вас есть время в system_clock::time_point
, эквивалентное steady_clock::time_point
.
Для конвертации из system_clock::time_point
в steady_clock::time_point
, вы можете выполнить обратные операции:
- Получите текущее время
system_clock
с помощью функцииsystem_clock::now()
:
std::chrono::system_clock::time_point system_time = std::chrono::system_clock::now();
- Создайте
system_clock::duration
, представляющую разницу между текущим временемsystem_clock
и начальным временемsystem_clock
:
std::chrono::system_clock::duration system_duration = system_time - start_time; // start_time - время начала программы
- Преобразуйте
system_duration
вsteady_clock::duration
с использованием функцииstd::chrono::duration_cast
:
std::chrono::steady_clock::duration steady_duration = std::chrono::duration_cast<std::chrono::steady_clock::duration>(system_duration);
- Создайте
steady_clock::time_point
, добавивsteady_duration
к начальному времениsteady_clock
:
std::chrono::steady_clock::time_point steady_time = start_time + steady_duration;
Теперь у вас есть время в steady_clock::time_point
, эквивалентное system_clock::time_point
.
Обратите внимание, что при конвертации между steady_clock
и system_clock
, возможно небольшое округление ошибка из-за различий в масштабах и точности этих типов часов.