使用字符串流设置日期格式
Formatting dates with stringstream
我想避免在我的C++代码中使用sprintf,这样我就可以只使用C++中的std字符串,但我还没有找到替换它的方法。我目前使用 sprintf 来格式化日期和时间,如下所示:
char myDate[DATE_LENGTH]{};
sprintf(myDate, "%4d-%02d-%02d %02d:%02d:%02d", year, month, day,
hour, minute, second);
这样,我将为每个整数获得一个固定的长度,如果需要,可以使用前导零。
我已经搜索了如何用字符串流替换它,并找到了这个:
std::ostringstream ss;
ss << std::setw(5) << std::setfill('0') << 12 << "n";
但这只会格式化其中一个整数。我需要为每个日期和 tiem 组件执行此操作,然后将所有这些组件附加到一起。因此,要替换一行 C 样式代码,我需要更多的新代码。
难道没有比这更好的方法吗?
(1) 定义自己的数据时间类。
(2)定义operator <<()
和operator >>()
。在这些函数中,使用std::time_put
和std::time_get
方面来实现。
(3)如果std::time_put
和std::time_get
不能满足您的需求,您可以通过继承它们来定义自己的time_put/get分面,并在必要时定义其他辅助分面,例如date_time格式管理器。
PS:如果您使用的是c ++ 11,则std::time_put::put()
和std::time_get::get()
可能会感到满意。
祝你好运!
在C++应用程序中使用 snprintf()
或 strftime()
并没有什么不好的。它们快速、可靠,并且是标准库的一部分。IOStreams有时太冗长而无法直接使用它们。始终可以将基于 sprintf
的序列化程序包装到iostream
shell 中。
在没有样板的情况下格式化 C++11 中的日期/时间的另一种方法是通过 put_time。
相关文章:
- 日期格式为C++
- 如何在QTableView中排序和更改日期格式
- 如何检查日期格式(日/月/年)是否正确C++
- 如何使用put_time()设置日期格式以删除前面的空格和零
- 在 c++ 中验证日期格式
- 使用字符串流设置日期格式
- 日期格式-将日期添加到日期
- 如何在黑莓10中将日期格式转换为字符串
- 提升公历日期格式会产生错误的结果
- Excel 国际日期格式
- 日期格式操作(年/月/日到月/日/年)
- 使用预处理器定义的日期格式
- 将日期格式Www-Mmm-dd hh:mm:ss yyyy转换为c++中的dd hh:mm:ss字符串
- 将字符串设置为日期格式
- 时间刻度到日期格式
- 转换日期格式
- 获取Win32系统日期格式字符串
- 在c++中自定义日期格式
- 如何检查日期格式的有效性(例如,%d/%m/%Y-%H:% m:%S)
- 以字符串形式返回整数值以进行日期格式设置