c++ 11的chrono有哪些替代方案?
What are the alternatives for C++11 chrono?
我正在运行下面的代码,检查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;
}
相关文章:
- 运行同一解决方案的另一个项目的项目
- 从持续时间构造std::chrono::system_clock::time_point
- Project Euler问题4的错误解决方案
- 如何在c++迭代器类型中包装std::chrono
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 使用 memcpy() 复制到 std::chrono::milliseconds 会给出错误 -Werror=clas
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- std::multimap<std::chrono::milliseconds, T>::rbegin 在 MSVS-13 中指向 end()?
- c++ 11的chrono有哪些替代方案?