假设我有time_t和tm结构。我不能使用Boost而是使用MFC。我怎样才能把它变成一个像下面这样的字符串?
Mon Apr 23 17:48:14 2012
使用sprintf是唯一的方法吗?
答案 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