假设我有 time_t 和 tm 结构。我不能使用 Boost 但 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++03time_put
在语言环境中有一个方面可以做同样的事情。如果没记错的话,我确实设法让它工作了一次,但在那之后觉得这不值得麻烦,从那以后我就再也没有做过了。
我会试试std::put_time
的。有关如何使用它的信息,请参阅此处的链接。它支持完整格式的字符串等。
如果您需要担心不同语言环境的格式设置,请不要忘记使用当前语言环境初始化 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/inittailizing-mfccrt-for-consumption-of-regional-settings-internationalizationc
ctime()
生成该格式的字符串。它需要一个指向 a 的指针time_t
。
还有asctime()
一个指针指向 astruct tm
并做同样的事情。
CTime obj1(time_tObj);
CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
MFC 有COleDateTime
which 有一个构造函数,它接受time_t
(或__time64_t
)并有一个Format
方法。