我正在使用libpq库从c ++连接到postgreSQL。我从postgreSQL请求并获取日期(没有时区的时间戳),但结果有一个我不知道如何解决的偏移量。
Postgres表:
id date
integer timestamp without time zone
29996 2014-02-28 23:59:00
导致C ++代码:
id: 29996, Date: Sat Mar 01 10:59:00 2014
您可以看到日期有偏移量。下面是我正在使用的代码。任何帮助将不胜感激
PGconn *m_connection;
PGresult *res;
string strConn = "dbname=test host=localhost user=username password=secret";
m_connection = PQconnectdb(strConn.c_str());
string query = "SELECT id, extract(epoch from date)::bigint ";
query += "FROM table_test ORDER BY id DESC LIMIT 1";
// send query
res = PQexecParams(m_connection, query.c_str(), 0, 0, 0, 0, 0, 0);
string id = PQgetvalue(res, 0, 0);
unsigned char *data = (unsigned char*)PQgetvalue( res, 0, 1 );
unsigned int length = PQgetlength( res, 0 , 1 );
time_t time = _atoi64( (char*)data );
PQclear(res);
std::cout << "id:"<< id << ", Date: " << ctime(&time) << "\n";
答案 0 :(得分:1)
问题是ctime
使用了localtime,因此最终会出现偏移量。
如果你想要GMT,那么你应该使用asctime(gmtime(&time))
,它会给你一个没有当地时间影响的日期/时间。
ctime
相当于asctime(localtime(&time))