c++ 11的chrono有哪些替代方案?

What are the alternatives for C++11 chrono?

本文关键字:方案 chrono c++      更新时间:2023-10-16

我正在运行下面的代码,检查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;
}

目前上面的代码使用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;
}

当我使用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

我建议使用boost::chrono,因为c++ 11规范在很大程度上是基于boost::date_time的(阅读这些提案,可以看出std::chrono的基础上使用了多少boost)。正如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;
}