假设我有一个time_t和tm结构,但不能使用Boost只能用MFC。如何将其转换为以下格式的字符串?
Mon Apr 23 17:48:14 2012
使用sprintf是唯一的方法吗?
假设我有一个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++03 中也有一个 time_put
locale facet 可以实现类似的功能。如果我没记错的话,我曾经成功过一次,但之后决定不值得麻烦,就再没用过了。
我会尝试使用 std::put_time
。请参见此链接以获取有关如何使用它的信息。它支持完整的格式字符串等。
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
ctime()
生成这种格式的字符串。它需要一个指向 time_t
的指针。
还有一个函数叫做 asctime()
,它需要一个指向 struct tm
的指针,并且执行相同的操作。
CTime obj1(time_tObj);
CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );