【问题标题】:How to format date and time string in C++如何在 C++ 中格式化日期和时间字符串
【发布时间】:2012-05-04 13:33:15
【问题描述】:

假设我有 time_t 和 tm 结构。我不能使用 Boost 但 MFC。我怎样才能使它像下面这样的字符串?

Mon Apr 23 17:48:14 2012

使用 sprintf 是唯一的方法吗?

【问题讨论】:

  • Boost.DateTime 已格式化 I/O 设施。
  • 再加上一两句话,这可能是一个(?)答案,@ildjarn
  • @Jasper :当我使用该库时,我发现向其他人推荐它很困难,因为文档太糟糕了。我刚刚发表了评论,以便 OP 可以自行选择(例如,有很多 SO 答案可以证明这一点,例如 this one)。

标签: c++ datetime mfc


【解决方案1】:

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

【讨论】:

【解决方案2】:

我会试试std::put_time。有关如何使用它的信息,请参阅link here。支持全格式字符串等。

【讨论】:

  • 值得注意的是,此解决方案仅适用于 C++11。
  • 还没有实现(gcc 4.8.1)。
【解决方案3】:

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

【讨论】:

【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:
      CTime obj1(time_tObj);
      
      CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
      

      【讨论】:

        猜你喜欢
        • 2017-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        相关资源
        最近更新 更多