【问题标题】:Getting a unix timestamp as a string in C++在 C++ 中将 unix 时间戳作为字符串获取
【发布时间】:2010-05-08 22:59:03
【问题描述】:

我正在使用函数 time() 来获取 C++ 中的时间戳,但是在这样做之后,我需要将其转换为字符串。我不能使用 ctime,因为我需要时间戳本身(10 个字符的格式)。麻烦的是,我不知道 time_t 变量采用什么形式,所以我不知道我从什么转换它。 cout 处理它,所以它必须是一些描述的字符串,但我不知道是什么。

如果有人可以帮助我,我将不胜感激,我完全被难住了。

或者,您能否将 ctime 的输出提供给 MySQL 日期时间字段并对其进行正确解释?为了理解起见,我仍然希望能回答我的问题的第一部分,但这会解决我的问题。

【问题讨论】:

    标签: c++ timestamp


    【解决方案1】:

    time_t 是某种整数。如果cout 以您想要的方式处理它,您可以使用std::stringstream 将其转换为字符串:

    std::string timestr(time_t t) {
       std::stringstream strm;
       strm << t;
       return strm.str();
    }
    

    【讨论】:

    • 假设 time_t 是一个整数在可移植性方面并不是一个好主意:“可移植程序不应该直接使用这种类型的值,而是总是依赖对标准库元素的调用来转换它们到便携式类型。” cplusplus.com/reference/ctime/time_t
    【解决方案2】:

    我遇到了同样的问题。我解决了如下:

    char arcString [32];
    std::string strTmp;
    
    // add start-date/start-time
    if (strftime (&(arcString [0]), 20, "%Y-%m-%d_%H-%M-%S", (const tm*) (gmtime ((const time_t*) &(sMeasDocName.sStartTime)))) != 0)
    {
        strTmp = (char*) &(arcString [0]);
    }
    else
    {
        strTmp = "1970-01-01_00:00:00";
    }
    

    【讨论】:

      【解决方案3】:

      试试sprintf(string_variable, "%d", time)std::string(itoa(time))

      【讨论】:

      • 这允许打印进程时间戳,但它总是返回 134515192。具体来说,我的代码是:char timestamp[10]; sprintf(时间戳,“%d”,时间);然后稍后查询 += 时间戳查询是 std::string。
      【解决方案4】:

      http://www.codeguru.com/forum/showthread.php?t=231056

      最后time_t只是一个整数。

      【讨论】:

        猜你喜欢
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-30
        • 2017-01-18
        • 2019-07-30
        • 1970-01-01
        • 2011-03-16
        相关资源
        最近更新 更多