我可以避免通过 time_t 打印 time_point 吗?

ein*_*ica 2 c++ time-t c++-standard-library c++11 c++-chrono

这是改编自 cppreference.com的示例:

#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>

int main() {
    std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(now);
    std::cout << "The time was just "
              << std::put_time(std::localtime(&now_c), "%F %T") << '\n';
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个。我想打印我的时间点而不必经过time_t. 我可以这样做吗...:

  1. 根本?
  2. put_time支持任意格式?

笔记:

  • 标准库解决方案是最好的;非标准但稳健的解决方案也是相关的。
  • 没有一个傻瓜的这个-因为我也是在任意格式印刷兴趣; 但应该注意的是,@HowardHinnant 对此的回答解决了这个问题的第一部分。

How*_*ant 5

Howard Hinnant 的库- 已被投票成为 C++20 的一部分 - 也支持put_time-like 格式。

#include "date/date.h"
#include <iostream>

int
main()
{
    std::cout << date::format("%m/%d/%Y %I:%M:%S %p\n", std::chrono::system_clock::now());
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

07/22/2018 03:30:35.001865 AM
Run Code Online (Sandbox Code Playgroud)