如何在C++中格式化日期和时间字符串

Tae*_*hin 16 c++ mfc datetime

假设我有time_t和tm结构.我不能使用Boost而是使用MFC.我怎样才能使它像下面的字符串?

Mon Apr 23 17:48:14 2012
Run Code Online (Sandbox Code Playgroud)

使用sprintf是唯一的方法吗?

Jer*_*fin 34

C库strftime专门用于格式化日期/时间.你要求的格式似乎对应于这样的东西:

char buffer[256];

strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &your_tm);
Run Code Online (Sandbox Code Playgroud)

我相信std::put_time使用类似的格式字符串,虽然它确实减轻了你必须明确处理缓冲区.如果你想把输出写入一个流,这很方便,但要把它变成一个字符串它不是很多帮助 - 你必须做的事情如下:

std::stringstream buffer;

buffer << std::put_time(&your_tm, "%a %b %d %H:%M:%S %Y");

// now the result is in `buffer.str()`.
Run Code Online (Sandbox Code Playgroud)

std::put_time在C++ 11中是新的,但C++ 03 time_put在语言环境中有一个方面可以做同样的事情.如果内存服务,我确实设法让它工作一次,但在那之后决定它不值得麻烦,我从那以后就没有做过.

  • 只是想注意 gcc 仍然缺乏对 put_time 的支持:/ (2认同)

Kev*_*son 12

我试试std::put_time.有关如何使用它的信息,请参阅此处链接.它支持完整格式字符串等.

  • 值得注意的是,此解决方案仅适用于C++ 11. (5认同)
  • 尚未实施(gcc 4.8.1). (3认同)