c++ - 对于 GCC <5,是否有 std::put_time 的内置替代方案?

标签 c++ time formatting gcc4

我暂时停留在 GCC4.8 上。我想将当前时间打印为秒以外的时间。如果 put_time工作,我的代码会很简单,像这样:

std::cout << std::setw(24) << std::put_time(c_time, "[%T%z %F] ");

没有 put_time ,我必须访问 c_time 的元素手动并手动进行所有格式化,这对 a** 来说会很痛苦,如果可能的话,我宁愿避免这样做。请注意,这并不意味着我不想以任何方式与 C 交互,即使是间接的——我只想尽可能避免直接用 C 编码。

但是,我找不到 std::put_time 的任何替代品, 除了 strftime ,我想避免这种情况,因为它需要几乎两倍的代码行并且更难阅读,至少对我来说是这样。另外,这是 C++,而不是 C,所以我想尽可能避开 C 函数。

我错过了什么吗? std::put_time 是否有内置替代方案?哪个在 GCC 4.8 下工作?

请注意,它不必以完全相同的方式工作 - 例如,如果它直接将其打印到输出,而不是作为流操纵器,那也很好,就像一个函数一样返回了 std::string包含格式化的时间。

我用谷歌搜索了一番,发现 <chrono> ,但这不起作用,因为它没有任何东西可以自动格式化时间。我仍然需要手动完成,而且我很确定它会更多工作,因为我必须将自纪元以来的秒数解析为年、月、日等。

最佳答案

除了put_time 没有其他功能用于输出 chrono 中提供的时间或 iomanip图书馆。

ctime 库确实提供:strftime , ctime , 和 asctime .

自从 http://stackoverflow.com不允许有关查找 3rd 方库的问题,我猜您只是在要求某人指导您使用 strftimestd::put_time(c_time, "[%T%z %F] ") 可以写成这样的格式:

char foo[24];

if(0 < strftime(foo, sizeof(foo), "[%T%z %F] ", c_time)) cout << foo << endl;

关于c++ - 对于 GCC <5,是否有 std::put_time 的内置替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421747/

相关文章:

c++ - 为什么在4GB的虚拟内存空间上只能分配2GB?

time - Java时间晚一小时

sql - 将十进制 DAYS 转换为 TIME 格式

c++ - 您可以使用 stringstream 来安全地进行双向转换吗?

c++ - 无法构建简单的 Boost XML 序列化示例

c++ - 如何检查给定进程在运行时加载了哪些共享库?

c++ - 有没有办法让模板函数自动推断迭代器的底层数据类型?

parsing - 更改 time.Time 时区而不重新解析

java - 如何验证输入是否匹配特定的时间戳格式?