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

时间:2012-04-23 22:09:35

标签: c++ datetime mfc

假设我有time_t和tm结构。我不能使用Boost而是使用MFC。我怎样才能把它变成一个像下面这样的字符串?

Mon Apr 23 17:48:14 2012

使用sprintf是唯一的方法吗?

6 个答案:

答案 0 :(得分:32)

C库包含strftime专门用于格式化日期/时间。您要求的格式似乎与以下内容相对应:

char buffer[256];

strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &your_tm);

我相信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()`.

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

答案 1 :(得分:8)

我试试std::put_time。有关如何使用它的信息,请参阅link here。它支持完整格式字符串等。

答案 2 :(得分:1)

MFC有COleDateTime,其构造函数采用time_t(或__time64_t)并具有Format方法。

答案 3 :(得分:1)

ctime()以该格式生成字符串。它需要指向time_t的指针 还有asctime()指向struct tm的指针并执行相同的操作。

答案 4 :(得分:1)

CTime obj1(time_tObj);

CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );

答案 5 :(得分:1)

如果您需要担心不同语言环境的格式,请不要忘记使用当前语言环境初始化CRT。 这也会影响COleDateTime。

setlocale(LC_COLLATE,“.OCP”); // sets the sort order

setlocale(LC_MONETARY, “.OCP”); // sets the currency formatting rules

setlocale(LC_NUMERIC, “.OCP”); // sets the formatting of numerals

setlocale(LC_TIME, “.OCP”); // defines the date/time formatting

请参阅我的博客文章,其中包含MSDN文章和其他来源。 http://gilesey.wordpress.com/2012/12/30/initailizing-mfccrt-for-consumption-of-regional-settings-internationalizationc