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

How to format date and time string in C++

本文关键字:时间 字符串 格式 日期 设置 C++      更新时间:2023-10-16

假设我有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方面。如果没记错的话,我确实设法让它工作过一次,但在那之后决定不值得麻烦,从那以后我就再也没有这样做过。

我会尝试std::put_time. 有关如何使用它的信息,请参阅此处的链接。 它支持完整格式的字符串等。

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

如果您需要担心不同区域设置的格式,请不要忘记使用当前区域设置初始化 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

MFC有COleDateTime它有一个构造器,它接受time_t(或__time64_t)并具有Format方法。

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