c++ - 使用 stringstream 格式化日期

标签 c++ string stringstream

我想避免在我的 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_putstd::time_get要实现的方面。

(3) 如果std::time_putstd::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/

相关文章:

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - Push.back into vector behavior maybe or something wrong with my for statement?

c# - 正则表达式:匹配短语中的所有单词

java - 使用 Itext 替换 PDF 文件中的字符串,但不替换字母 X

c++ - 具有直接输出缓冲区/字符串结果访问的 std::stringstream,避免复制?

c++ - 让 Stringstream 从字符串中的字符 A 读取到 B

c++ - 让 QtConcurrent 中的 QTimer 正常工作

c++ - 将指针分配添加到 vector 后删除它

python - 拆分一列字符串并用 Pandas 计算单词数

c++ - 字符串流数学运算