0

我想以某种格式将时间戳写入文件。

有没有办法使用修饰符创建一个新字符串(参见下面的 printf 代码)?还是有另一种方法可以在 TextStream 中使用字符串修饰符?

printf("%02d-%02d-%02d_%02d:%02d:%02d.%02d\n", 
       st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
4

2 回答 2

5

一种类型安全的替代方案,无需担心缓冲区大小,将直接在输出流上或在以下位置使用IO 操纵器std::ostringstream

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

int main()
{
    std::ostringstream s;
    s << std::setfill('0')
      << std::setw(2) << 1 << ':' // st.wYear, etc
      << std::setw(2) << 97 << ':'
      << std::setw(2) << 4;

    std::cout << s.str() << "\n";

    return 0;
}

此外,先前的答案说明了int进入 a 的方法std::string将 int 附加到 std::string

于 2012-08-06T20:19:08.633 回答
1

如果你使用sprintf而不是printf,你想要的字符串被写入char缓冲区而不是打印。

sprintf(buffer, "%02d-%02d-%02d_%02d:%02d:%02d.%02d\n", 
        st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

您还可以使用Boost 格式库

于 2012-08-06T20:14:56.467 回答