【问题标题】:Convert MySQL Datetime to C++ std::time_t将 MySQL 日期时间转换为 C++ std::time_t
【发布时间】:2016-11-01 05:46:21
【问题描述】:

我遇到了一个问题,真的希望你能帮助我。我喜欢将 MySQL DATETIME 字段转换为 C++ std::time_t 变量。我的数据库如下所示:

CREATE TABLE data(
    id              INTEGER       AUTO_INCREMENT UNIQUE,
    path            VARCHAR(1000),
    acquisitionDate DATETIME
);

我正在尝试将 acquisitionDate 中的值保存到 std::time_t 类型的 c++ 变量中。

经过一些网络搜索后,我了解到我必须在我的 MySQL 语句中使用 UNIX_TIMESTAMP。但是,我不明白如何实际使用它。我可以生成查询并收到sql::ResultSet

std::unique_ptr<sql::Statement> stmt(mConnection->createStatement());

std::string query="SELECT id, path, UNIX_TIMESTAMP(acquisitionDate) FROM data WHERE id = 1";

std::unique_ptr<sql::ResultSet> res(stmt->executeQuery(query));

但我不明白如何将实际字段值放入std::time_t 变量中

if(res->next())
{
    std::time_t acquisitionDate =  res->getInt("acquisitionDate");
    std::time_t acquisitionDate =  res->???
}

不知何故,我的大脑没有完成这最后一步。请帮我。 非常感谢!

【问题讨论】:

    标签: c++ mysql datetime time-t


    【解决方案1】:

    我还了解到可以通过以下方式访问输出的字段:

    std::time_t acquisitionDate =  res->getInt("UNIX_TIMESTAMP(acquisitionDate)");
    

    或者 SQL 语句可以重命名字段:

    SELECT UNIX_TIMESTAMP(acquisitionDate) AS foo FROM data WHERE id = 1
    

    然后

    std::time_t acquisitionDate =  res->getInt("foo");
    

    但是,强制转换也应该是一个好主意(在您拥有正确的字段名称之后):

    std::time_t acquisitionDate =  static_cast<std::time_t>(res->getInt("foo"));
    

    【讨论】:

    • 您也可以使用别名UNIX_TIMESTAMP(acquisitionDate) AS acquisitionDate 或通过索引res-&gt;getInt(2) 获取int。
    【解决方案2】:

    直接投吧

    std::time_t acquisitionDate = (std::time_t)res-&gt;getInt("acquisitionDate");

    【讨论】:

    • 非常感谢您的回答。铸造是一个很好且相当简单的想法。但是,我发现我的问题是理解如何访问返回的字段。查看我对这个问题的回答
    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 2012-09-03
    • 2013-07-03
    • 2015-03-23
    • 2014-11-07
    • 2021-07-21
    • 2011-07-05
    相关资源
    最近更新 更多