在 C++ 中创建一个人类可读的时间戳并存储在字符串中

Create a human-readable timestamp and store in string in C++

我想根据程序 运行 的时间创建带有时间戳的文件名,即

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++ 中执行此操作的简单方法?

您要求的内容未定义。您的时间戳来自 "steady" 时钟 which guarantees monotonic time but is not related to wall clock time and thus cannot be converted into a human-readable timestamp (think about what happens if you adjust your system time -1 min, a monotonic clock can never be adjusted like this!). Monotonic clocks often count from system start. If you want to print timestamps you most likely want to use std::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() documentation 中找到有关格式化 date/time 的更多信息。

警告:std::localtime可能不是线程安全的!如果您打算在多线程上下文中使用它,请检查您的标准库的文档。有时也会提供可重入版本(通常称为 localtime_r)。