对于GCC <5,是否有内置的替代std :: put_time?

Fun*_*uit 13 c++ formatting time gcc4

我暂时停留在GCC4.8上.我想把当前时间打印成秒之外的东西.如果put_time工作,我的代码将是简单的,如下所示:

std::cout << std::setw(24) << std::put_time(c_time, "[%T%z %F] ");
Run Code Online (Sandbox Code Playgroud)

没有put_time,我必须c_time手动访问元素并手动执行所有格式化,这将是a**的痛苦,如果可能的话,我更愿意避免.请注意,这并不意味着我从不想以任何方式与C进行交互,即使是间接的 - 我只是想尽可能避免在C中直接编码.

但是,std::put_time除了strftime我想要避免的之外,我找不到任何替代方案,因为它需要几乎两倍的代码行,并且更难以阅读,至少对我而言.此外,这是C++,而不是C,所以我想尽可能避开C函数.

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

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

我已经做了很多谷歌搜索并找到了<chrono>,但这不起作用,因为它没有任何东西可以自动格式化时间.我仍然需要手动完成,而且我很确定这会有效,因为我必须将自纪元以来的秒数解析为一年,一月,一天等.

Jon*_*Mee 10

除了put_time输出库chronoiomanip库中提供的时间之外,没有其他功能.

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

由于http://stackoverflow.com不允许关于发现3个问题第三党库,我要去猜,你只是要求别人指导你使用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;
Run Code Online (Sandbox Code Playgroud)

  • 我在问是否有任何内置库可以做到这一点,这是主题。你已经回答了。此外,Stack Overflow 允许您说,“这是一个解决您问题的库”;它只是专门询问被禁止的异地资源。换句话说,如果您知道第三方库,您可以提及它;那不是我所要求的。谢谢你的帮助! (2认同)

uh *_*per 5

此外,这是C++,而不是C,所以我想尽可能避开C函数.

这是一种非常愚蠢的心态.在引擎盖下put_time使用std::strftime.

ext.manip#10

返回:未指定类型的对象...其中函数f定义为:

template <class charT, class traits>
void f(basic_ios<charT, traits>& str, const struct tm* tmb, const charT* fmt) {
  /* ... */
  typedef time_put<charT, Iter> TimePut;

  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

并且time_put定义在locale.time.put.virtuals#1:

效果:将参数的内容格式化t为放置在输出序列上的字符s.格式化由参数格式和修饰符控制,相同地解释为标准库函数的字符串参数中的格式说明符 strftime()...