假设我们有
#include <chrono>
#include <iostream>
#include <ctime>
namespace Ratios { typedef std::ratio<60*60*24,1> Days; }
typedef std::chrono::system_clock Clock;
typedef Clock::time_point TimePoint;
Run Code Online (Sandbox Code Playgroud)
我们main看起来像
int main(int argc, char *argv[])
{
// argc check left out for brevity
const Clock::rep d = static_cast<Clock::rep>(std::atoi(argv[1]));
// Right now
TimePoint now = Clock::now();
// Start with zero days
auto days = std::chrono::duration<Clock::rep, Ratios::Days>::zero();
// Now we'd like to add d to the days
days += d; // Error!
days.count() = d; // Error!
days = …Run Code Online (Sandbox Code Playgroud) 在http://en.cppreference.com/w/cpp/chrono的示例中,在a中获取秒值double.这是我想要的行为.然而,这似乎依赖于隐含的假设,即时间点减法产生表示秒的值.我找不到任何解释为什么持续时间在没有实际指定时间单位时产生浮点秒的原因.在没有使用的情况auto下,有人可以展示如何在浮点类型中显式获取时间单位,例如秒,或者指向文档或解释为什么上述转换代表秒数?
有问题的转换基本上是:
std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit?
double secondsInDouble = elapsed_seconds.count();
Run Code Online (Sandbox Code Playgroud)
有关转换的示例,请参阅以下帖子.
如何从<chrono>获得int milli和float秒的持续时间?