C++ 11 chrono有哪些替代方案?

joh*_*ohn 0 c++ boost ctime c++11

我正在运行我的下面代码,检查是否data_timestamp超过两周.如果它超过两周,则打印hello否则打印world.

我是一名Java开发人员,最近开始使用C++.通过互联网学到了一些东西,所以我在这个程序中使用它.我没有意识到并非所有代码都可以使用C++ 11功能运行.

#include <ctime>
#include <chrono>
#include <iostream>

int main()
{

    uint64_t data_timestamp = 1406066507000; 

    const auto now = std::chrono::system_clock::now();
    auto twoWeeks = std::chrono::hours(24 * 14);
    auto lastTwoWeeks = now - twoWeeks;

    auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();

    std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;

    if (data_timestamp < millis) { 
        std::cout << "Hello"; 
    } else { 
        std::cout << "World"; 
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

目前上面的代码使用C++ 11功能,但我使用上面两周时间戳代码逻辑的实际代码不支持C++ 11所以我正在寻找各种替代方案.

我还能在这里使用哪些不需要C++ 11的可移植性?我可以使用<ctime>Boost.Chrono在这里?

任何与上面的代码完全相同但不使用C++ 11特性的简单示例将会有很大帮助.

更新: -

以下是我正在尝试的代码 -

#include <boost/chrono/chrono.hpp>
#include <iostream>

int main()
{
    uint64_t data_timestamp = 1406066507000; 

    const auto now = boost::chrono::system_clock::now();
    auto twoWeeks = boost::chrono::hours(24 * 14);
    auto lastTwoWeeks = now - twoWeeks;

    auto millis = boost::chrono::duration_cast<boost::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();

    std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;

    if (data_timestamp < millis) { 
        std::cout << "Hello"; 
    } else { 
        std::cout << "World"; 
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因为我正在使用make install -j4下面编译代码是我回来的例外 -

warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: ânowâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âtwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âlastTwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âmillisâ does not name a type
error: âmillisâ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

qua*_*dev 6

我建议boost::chrono,因为C++ 11级的规格在很大程度上是基于boost::date_time(提案读如这一次揭示了多少提振用作基地std::chrono).正如Howard Hinnant评论的那样,boost::chrono然后被复制了std::chrono

一旦你得到一个C++ 11编译器(易于移植到std::),它也会让你更容易


一个简单的例子:

#include <boost/chrono/chrono.hpp>
#include <iostream>

int main()
{
    uint64_t data_timestamp = 1406066507000;

    const boost::chrono::system_clock::time_point now = boost::chrono::system_clock::now();
    boost::chrono::hours twoWeeks = boost::chrono::hours(24 * 14);
    boost::chrono::system_clock::time_point lastTwoWeeks = now - twoWeeks;

    boost::int_least64_t millis = boost::chrono::duration_cast<boost::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();

    std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;

    if (data_timestamp < millis) {
        std::cout << "Hello";
    } else {
        std::cout << "World";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)