1

如何从 std::chrono::system_clock::time_point 设置平台(windows、linux、android)的系统时间。

4

2 回答 2

4

您不能使用 std::chrono 工具来设置任何时钟的时间。您可以做的最好的事情是制造 astd::chrono::system_clock::time_point来表示所选时间,将其转换为 a time_t,然后将其与平台的 API 一起使用来设置时钟。

于 2013-05-13T19:43:39.530 回答
1

对于 Linux,我喜欢Converting between timespec & std::chrono的参考代码:

#include <time.h>
#include <chrono>

using std::chrono; // for example brevity

constexpr timespec timepointToTimespec(
    time_point<system_clock, nanoseconds> tp)
{
    auto secs = time_point_cast<seconds>(tp);
    auto ns = time_point_cast<nanoseconds>(tp) -
             time_point_cast<nanoseconds>(secs);

    return timespec{secs.time_since_epoch().count(), ns.count()};
}

const char* timePointToChar(
    const time_point<system_clock, nanoseconds>& tp) {
    time_t ttp = system_clock::to_time_t(tp);
    return ctime(&ttp);
}

const time_point system_time = system_clock::now();
cout << "System time = " << timePointToChar(system_time) << endl;

const timespec ts = timepointToTimespec(system_time);
clock_settime(CLOCK_REALTIME, &ts);
于 2021-03-31T19:35:49.327 回答