我想避免在我的 C++ 代码中使用 sprintf,这样我只能使用 C++ 中的标准字符串,但我还没有找到替换它的方法。我目前使用 sprintf 来格式化日期和时间,如下所示:
char myDate[DATE_LENGTH]{};
sprintf(myDate, "%4d-%02d-%02d %02d:%02d:%02d", year, month, day,
hour, minute, second);
通过这种方式,我将为每个整数获得固定长度,如果需要,可以使用前导零。
我搜索了如何用 stringstream 替换它,并找到了这个:
std::ostringstream ss;
ss << std::setw(5) << std::setfill('0') << 12 << "\n";
但这只会格式化其中一个整数。我需要为每个日期和时间组件执行此操作,然后将它们全部附加在一起。因此,要替换一行 C 风格的代码,我需要更多的新代码。
没有比这更好的办法了吗?
最佳答案
(1)定义自己的datatime类。
(2) 定义operator <<()
和 operator >>()
为了它。在这些功能中,使用 std::time_put
和 std::time_get
要实现的方面。
(3) 如果std::time_put
和 std::time_get
不能满足你的需求,你可以通过继承定义你自己的time_put/get facet,如果需要的话还可以定义其他的辅助facet,比如date_time format manager。
PS:如果您使用的是 c++11,std::time_put::put()
和 std::time_get::get()
可能会满意。
祝你好运!
关于c++ - 使用 stringstream 格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142372/