我可以避免通过 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
。我可以这样做吗...:
- 完全没有?
- 像
put_time
这样的任意格式支持吗?
备注:
- 标准库解决方案最好;非标准但稳健的解决方案也很重要。
- 不是 this 的骗局——因为我也对任意格式打印感兴趣;但应该注意的是,@HowardHinnant 对那个问题的回答解决了这个问题的第一部分。
由于@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
这是一个例子 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
。我可以这样做吗...:
- 完全没有?
- 像
put_time
这样的任意格式支持吗?
备注:
- 标准库解决方案最好;非标准但稳健的解决方案也很重要。
- 不是 this 的骗局——因为我也对任意格式打印感兴趣;但应该注意的是,@HowardHinnant 对那个问题的回答解决了这个问题的第一部分。
由于@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