是否有一个C++11
版本的matlabsdatenum
函数#include<chrono>
?
问问题
116 次
2 回答
2
不,那里没有。但是,这里有一个“操作指南”手册,介绍了如何为chrono
兼容的日期库编写算法。使用这些算法,我可以轻松地执行以下操作:
#include "../date_performance/date_algorithms"
#include <ratio>
#include <chrono>
#include <iostream>
typedef std::chrono::duration
<
int,
std::ratio_multiply<std::ratio<24>, std::chrono::hours::period>
> days;
typedef std::chrono::time_point<std::chrono::system_clock, days> date_point;
int
main()
{
using namespace std::chrono;
date_point datenum{days{days_from_civil(2014, 2, 5)}};
auto d = system_clock::now() - datenum;
auto h = duration_cast<hours>(d);
d -= h;
auto m = duration_cast<minutes>(d);
std::cout << "The current UTC time is " << h.count() << ':' << m.count() << '\n';
date_point datenum2{days{days_from_civil(2014, 3, 5)}};
std::cout << "There are " << (datenum2-datenum).count() << " days between 2014-03-05 and 2014-02-05\n";
}
对我来说输出:
The current UTC time is 22:12
There are 28 days between 2014-03-05 and 2014-02-05
您需要做的第一件事是创建一个chrono::duration
代表一天,days
如上所述。chrono::time_point
然后根据持续时间创建一个很方便days
。这time_point
与每个已知的实现兼容system_clock::time_point
。即你可以减去它们。
now()
在此持续时间内,我从当前日期中减去以获取 UTC 时区一天中的小时数::分钟数。我还演示了如何计算任意两个日期之间的天数。
随意使用这些算法,也许将所有这些都包装在一个类型安全的日期类中。该链接仅提供算法,而不是实际的日期类。
如果我有时间的话,我将来可能会发布一个基于这些算法的日期类......
于 2014-02-05T22:14:47.020 回答
1
我不知道 matlabs datenum 是什么,但这里是如何做与您链接到的问题的公认答案基本相同,即时间点和持续时间的算术,但在 C++11 中没有提升:
#include <chrono>
#include <iostream>
using namespace std;
using namespace std::chrono;
int main() {
duration<long> one_day{ hours(24) };
system_clock::time_point now = system_clock::now();
system_clock::time_point tomorrow = now + one_day;
time_t t = system_clock::to_time_t(tomorrow);
cout << "Tomorrow: " << ctime(&t) << '\n';
}
希望这可以帮助。
于 2014-01-30T13:33:09.627 回答