【问题标题】:PostgreSQL and C++ - Compare datesPostgreSQL 和 C++ - 比较日期
【发布时间】:2013-06-01 19:42:49
【问题描述】:

我有一个名为 date() 的 C++ 函数,它以字符串形式返回当前日期:

string date()
{
   time_t seconds = time (NULL);
   struct tm * timeinfo = localtime (&seconds);
   ostringstream oss;
   oss << (timeinfo->tm_year + 1900) 
       << "-" << (timeinfo->tm_mon + 1) 
       << "-" << timeinfo->tm_mday; 
   string data = oss.str();

   return data;
}

我需要将date() 的返回值与存储在我的一张表中的值进行比较。这是我迄今为止尝试过的:

if(strcmp(PQgetvalue(res,row,col),date()) != 0)

但是,编译器不断向我抛出以下错误:

错误:无法将参数 '2' 的 'std::string {aka std::basic_string}' 转换为 'const char*' 到 'int strcmp(const char*, const char*)'强>

谁能帮我找到解决办法?

【问题讨论】:

  • 对于转换尝试使用 c_str() 函数。
  • 如果您使用libpqtypes 处理大部分此类事情,您将节省大量时间和麻烦。
  • 现在,我只需要一个快速的解决方案来在项目中实施。稍后,我会研究它!
  • 等一下……您知道 PostgreSQL 中的 CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP 函数,对吧? (例如,尝试在您的任何数据库上运行以下 DML 语句:SELECT CURRENT_TIMESTAMP;。)

标签: c++ postgresql date compare


【解决方案1】:

1 - 您可以使用字符串的 c_str() 方法来访问底层 C 字符串:

if(strcmp(PQgetvalue(res,row,col),date().c_str()) != 0)

2 - 更好的是,如果你想使用“完整的 C++”,请将PQgetvalue 的输出转换为字符串,并使用比较运算符:

if(string(PQgetvalue(res,row,col)) == date())

【讨论】:

  • 你的第二点应该是第一点。你甚至可以省略显式 char 指针到字符串的转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多