【问题标题】:Getting the current time as a YYYY-MM-DD-HH-MM-SS string获取当前时间作为 YYYY-MM-DD-HH-MM-SS 字符串
【发布时间】:2011-03-25 21:48:32
【问题描述】:

我正在尝试以一种优雅的方式将当前时间作为“YYYY-MM-DD-HH-MM-SS”格式的字符串。我可以从 Boost 的“日期时间”库中获取 ISO 格式的当前时间,但它有其他对我不起作用的分隔字符串(我在文件名中使用它)。 当然,我可以只替换分隔字符串,但感觉有一种更好的方法可以使用日期时间的格式选项来做到这一点。有没有这样的方法,如果有,怎么用?

【问题讨论】:

    标签: c++ boost string-formatting boost-date-time


    【解决方案1】:

    使用std::strftime,它是标准C++。

    #include <cstdio>
    #include <ctime>
    
    int main ()
    {
        std::time_t rawtime;
        std::tm* timeinfo;
        char buffer [80];
    
        std::time(&rawtime);
        timeinfo = std::localtime(&rawtime);
    
        std::strftime(buffer,80,"%Y-%m-%d-%H-%M-%S",timeinfo);
        std::puts(buffer);
    
        return 0;
    }
    

    【讨论】:

    • 写入std::string 并因此不担心缓冲区溢出的东西会很好。可以理解,strftime 应该有一个可预测的最大长度。有什么陷阱吗?
    • 有任何线程安全的解决方案吗?请参阅link - std::localtime() 不是线程安全的。
    【解决方案2】:

    答案取决于获取和获取的含义。如果您尝试输出格式化的时间字符串,请使用 strftime()。如果您尝试将文本字符串解析为二进制格式,请使用 strptime()。

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 1970-01-01
      • 2019-02-17
      • 2018-06-16
      • 2018-11-08
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      相关资源
      最近更新 更多