我想根据程序运行的时间创建带有时间戳的文件名,即
logfile_2020-04-21_18:11:10.txt
logfile_2020-04-22_18:13:43.txt
...
我可以得到时间戳(我认为)
std::chrono::steady_clock::time_point timestamp = std::chrono::steady_clock::now();
但我不知道如何将其转换为字符串,更不用说人类可读的字符串了。
时间戳的确切格式并不重要,只要它具有完整的日期和时间即可。有没有一种简单的方法可以使用标准库在 C++ 中做到这一点?
你所要求的没有定义。您的时间戳来自“稳定”时钟它保证单调时间,但与挂钟时间无关,因此无法转换为人类可读的时间戳 https://en.cppreference.com/w/cpp/chrono/steady_clock(想想如果你将系统时间调整-1分钟会发生什么,单调时钟永远不能这样调整!)。单调时钟通常从系统启动时开始计数。如果您想打印您最有可能想要使用的时间戳std::chrono::system_clock https://en.cppreference.com/w/cpp/chrono/system_clock- 例如像这样:
#include <iostream>
#include <chrono>
#include <iomanip>
int main() {
auto timestamp = std::chrono::system_clock::now();
std::time_t now_tt = std::chrono::system_clock::to_time_t(timestamp);
std::tm tm = *std::localtime(&now_tt);
std::cout << std::put_time(&tm, "%c %Z") << '\n';
return 0;
}
您可以在以下位置找到有关格式化日期/时间的更多信息std::put_time()文档 https://en.cppreference.com/w/cpp/io/manip/put_time.
Warning: std::localtime
可能不是线程安全的!如果您打算在多线程上下文中使用标准库,请检查它的文档。有时还提供可重入版本(通常称为localtime_r https://linux.die.net/man/3/localtime_r).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)