如何在C++中以毫秒为单位获取当前时间?

1 c++ time milliseconds

问题是,我必须以方便的格式以毫秒为单位获取当前时间.

期望输出的示例:

21小时04分12秒512毫秒

我知道如何在几秒钟内获得这种格式,但我不知道如何让我的手在几毫秒?

Snp*_*nps 7

使用便携式 std::chrono

auto now = std::chrono::system_clock::now();
auto time = std::chrono::system_clock::to_time_t(now);
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) -
          std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch());

std::cout << std::put_time(std::localtime(&time), "%H h %M m %S s ");
std::cout << ms.count() << " ms" << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

21小时24分22秒428毫秒

Live example


对于时钟不支持毫秒分辨率的系统,请注意

正如@ user4581301所指出的,在某些系统上std::system_clock可能没有足够的分辨率来准确表示当前时间(以毫秒为单位).如果是这种情况,请尝试使用std::high_resolution_clock计算自上一秒以来的毫秒数.这将确保您的实施提供的最高可用分辨率.

从两个时钟中抽出时间将不可避免地导致您获得两个不同的时间点(不过时间差很小).因此请记住,使用单独的时钟计算毫秒数不会在第二个和毫秒级之间产生完美的同步.

// Use system clock for time.
auto now = std::chrono::system_clock::now();

/* A small amount of time passes between storing the time points. */

// Use separate high resolution clock for calculating milliseconds.
auto hnow = std::chrono::high_resolution_clock::now();
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(hnow.time_since_epoch()) -
          std::chrono::duration_cast<std::chrono::seconds>(hnow.time_since_epoch());
Run Code Online (Sandbox Code Playgroud)

此外,似乎不能保证滴定事件std::high_resolution_clockstd::system_clock同步,并且因此毫秒周期可能与系统时钟给出的当前秒的周期性更新不同步.

由于这些原因,当<1秒精度至关重要时,不应使用单独的高分辨率时钟以达到毫秒级分辨率.