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输出库chrono或iomanip库中提供的时间之外,没有其他功能.
该ctime库确实提供:strftime,ctime,和asctime.
由于http://stackoverflow.com不允许关于发现3个问题第三党库,我要去猜,你只是要求别人指导你使用strftime?std::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)
此外,这是C++,而不是C,所以我想尽可能避开C函数.
这是一种非常愚蠢的心态.在引擎盖下put_time使用std::strftime.
返回:未指定类型的对象...其中函数
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()...