如何从system_time :: time_point设置系统时间

时间:2013-05-13 19:07:12

标签: c++ c++11

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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);