在 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
)。
我想根据程序 运行 的时间创建带有时间戳的文件名,即
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
)。