比方说,我有time_t的和TM结构。 我不能使用升压,但MFC。 我怎样才能使它像下面的字符串?
Mon Apr 23 17:48:14 2012
是使用的sprintf的唯一途径?
比方说,我有time_t的和TM结构。 我不能使用升压,但MFC。 我怎样才能使它像下面的字符串?
Mon Apr 23 17:48:14 2012
是使用的sprintf的唯一途径?
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
在一个区域, 可以做同样的事情方面。 如果没有记错,我还是设法使其工作一次,但之后决定是不值得的麻烦,因为我还没有做到。
我想尝试std::put_time
。 看到这里的链接了解如何使用它的信息。 它支持全格式字符串和等。
MFC具有COleDateTime
其具有构造器这需要time_t
(或__time64_t
)和具有Format
方法。
ctime()
产生该格式串。 它需要一个指向time_t
。
还有asctime()
需要一个指向一个struct tm
和不一样的。
CTime obj1(time_tObj);
CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
如果你需要担心不同的地区格式化,不要忘了与当前的区域设置初始化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