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

Can I avoid going through time_t to print a time_point?

这是一个例子 adapted from 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';
}

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

  1. 完全没有?
  2. put_time这样的任意格式支持吗?

备注:

由于@inf 的建议,在 this answer 中找到了不允许您选择打印格式或时区的部分解决方案:您可以简单地将时间点通过管道传输到标准输出以获得它的 UTC 时间戳字符串:

std::cout << std::chrono::system_clock::now() << " UTC\n";

但对于任意格式的问题仍然存在。

Howard Hinnant's library - 已被投票成为 C++20 的一部分 - 还支持类似 put_time 的格式设置。

#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());
}

示例输出:

07/22/2018 03:30:35.001865 AM