gmtime给我一些当地时间?

时间:2014-10-08 10:26:45

标签: c++ visual-c++ g++

我在多线程环境中打印事件,控制台是所有线程共享的静态互斥锁。

当我得到的时间是当地时间而不是UTC时,问题是每隔一百或几千个事件。

我在Linux机器(使用g ++构建)中看到了这个错误,但在Windows(构建VC ++)中却没有。我不知道我可以从哪里开始,任何想法?

void  Publish(std::string source, std::string topic, std::string msg) NOEXCEPT {
    console.lock();
    std::time_t now = std::chrono::high_resolution_clock::to_time_t(*localTime);

    char buf[50];
    strftime(buf, sizeof (buf), "%Y-%m-%dT%H:%M:%S+00:00", gmtime(&now));

    cout << buf << " " << source << " " << topic << " " << msg << endl;
    cout.flush();
    console.unlock();
}

1 个答案:

答案 0 :(得分:0)

struct tm * gmtime (const time_t * timer);

将time_t转换为tm作为UTC时间。此调用使用timer指向的值来填充tm结构,其中的值表示相应的时间,表示为UTC时间(即GMT时区的时间)。

这必须正常工作。 但是,不确定:

 std::time_t now = std::chrono::high_resolution_clock::to_time_t(*localTime);

您的* localtime是否在多线程情况下准确提供当前时间?它是共享变量吗? 相反,您可以使用以下内容:

std::time_t now = time(0);