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

时间:2018-07-21 21:09:35

标签: c++ c++11 c++-standard-library chrono time-t

下面是一个示例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支持的任意格式?

注释:

  • 标准库解决方案是最好的;非标准但可靠的解决方案也很重要。
  • 不是this的伪装-因为我也对任意格式的打印感兴趣;但应注意,@ HowardHinnant对此的回答解决了该问题的第一部分。

2 个答案:

答案 0 :(得分:1)

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

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

但问题仍然是任意格式。

答案 1 :(得分:0)

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