2016-11-22 2 views
0

я создаю таблицу a_tb используя следующий SQL в командной строке MySQL:Как получить поле с типом временной метки в MySQL через ODBC с помощью CPP в окнах

create table a_tb(id int not null auto_increment, w_time timestamp default current_timestamp,a int default -1, PRIMARY KEY (id)); 
+--------+-----------+------+-----+-------------------+----------------+ 
| Field | Type  | Null | Key | Default   | Extra   | 
+--------+-----------+------+-----+-------------------+----------------+ 
| id  | int(11) | NO | PRI | NULL    | auto_increment | 
| w_time | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| a  | int(11) | YES |  | -1    |    | 
+--------+-----------+------+-----+-------------------+----------------+ 

И я использую insert into a_tb (a) values (2); Затем я получаю:

+----+---------------------+------+ 
| id | w_time    | a | 
+----+---------------------+------+ 
| 1 | 2016-11-22 17:09:34 | 2 | 
+----+---------------------+------+ 

То, что я хочу сделать, это прочитать данные из a_tb с помощью C++ с помощью ODBC. Я прочитал msdn и успешно получил доступ, чтобы получить данные из таблицы, используя код Connecting to a MySQL server using C++. Каждое поле в порядке, кроме отметки времени, в которой я всегда получаю некоторые странные числа. И то, что я попытался это следующим образом:

SQLTIMESTAMP tt[14]; 
SQLGetData(hstmt, 2, SQL_C_TIMESTAMP, tt, 0, &cbTestInt); 

и я получаю enter image description here

в консоли и

time_t tt; 
SQLGetData(hstmt, 2, SQL_C_TIMESTAMP, &tt, 0, &cbTestInt); 

я 4222219140663264. и

SQLINTEGER sTestInt, cbTestStr; 
SQLGetData(hstmt, 2, SQL_C_ULONG, &sTestInt, 0, &cbTestInt); 

я 2016.

Но я хочу получить 2016-11-22 17:09:34. Я озадачен попытками многих методов ...

ответ

0

Это число представляет собой числовое представление timestamp. Это количество секунд, прошедших с тех пор (я считаю) 1970-01-01. Если это не целое число, а действительное число, значение после. это число микросекунд.

Теперь, когда мы понимаем зверя, давайте посмотрим, как с ним бороться. Вы можете реализовать функцию, которая собирает год, месяц, день, час, минуту и ​​секунду от этого числа, но это было бы неинтуитивным решением. Вместо этого вы можете использовать strftime для преобразования этого числа в дату.

+0

но я думаю, что '4222219140663264' не может быть преобразован в разумное время' strftime' –