我在linux中开发c ++ 11项目。现在我对时间库有一些要求。
我想用时间......
最近我发现std :: chrono及其比较函数非常有用。另一方面,我知道一些像time.h这样的遗留库。就我而言,什么是最好的时间库?我想选择最好的时间库。
答案 0 :(得分:4)
std::chrono
提供了许多优于传统计时器库的优势:
std::steady_clock
提供的保证很难通过传统API实现,而无需借助特定于平台的解决方案。值得注意的一大缺点是,由于chrono是一个相对年轻的库,实现更有可能包含bug。我个人遇到了Boost和Visual C ++ 2012 chrono实现的几个小问题,虽然没有一个是关键的,但它们并不是很令人满意。
另请注意,chrono明确排除了有关日期和日历的任何功能。为此功能提供了interop with the C API。
个人建议:总体而言,API之间的差异并不那么显着。您列出的简单用例应该相当容易用两个API实现,因此我建议您坚持使用最适合周围代码库的用例:如果您使用现代C ++编写< / em>风格,不怕模板和复杂类型,你会感到宾至如归。另一方面,如果您的代码更接近基于C的POSIX API的设计,time.h
可能更适合。
答案 1 :(得分:4)
在<chrono>
之上分层,有更多的日历计算和细节,这可能会对您有用free, open source, date time library。
- 访问日志的时间戳
- 人性化的日志,例如“2014/01/3/18:32:32”
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
std::cout << format("%Y/%m/%d %T\n", floor<seconds>(system_clock::now()));
}
刚刚给我输出的内容:
2017/07/08 18:00:19
- 比较上次访问和当前访问之间的秒数
auto last_access = floor<seconds>(system_clock::now());
// ...
auto current_access = floor<seconds>(system_clock::now());
if (current_access > last_access)
// ...
- 易于转换,utc&lt; - &gt; EPOC
auto now = floor<seconds>(system_clock::now());
cout << format("%F %T %Z", now) << '\n';
cout << now.time_since_epoch() << '\n';
输出:
2017-07-08 18:06:53 UTC
1499537213s
哦,并且抬头,Unix时间15亿秒即将到来:
cout << format("%F %T %Z\n", sys_seconds{1'500'000'000s});
2017-07-14 02:40:00 UTC