Как получить DateTime из MySQL, используя xdevapi - PullRequest
0 голосов
/ 02 сентября 2018

Когда я выбираю поле dateTime, оно возвращается как 6 байтов. Как я могу преобразовать его в time_point или struct tm?

mysqlx::Session session( "mysqlx://root:password@127.0.0.1:33060/catalog" );
auto row = session.sql( "select create_time from information_schema.tables order by 1 LIMIT 1" ).execute().fetchOne();
assert( row[0].getType()==8 );//raw type
assert( row[0].getRawBytes().second==6 );//6 bytes
var bytes = row[0].getRawBytes().first;
//e2 0f 08 0c 0a 32 
//2018-08-12 10:50:04

1 Ответ

0 голосов
/ 15 ноября 2018

Эй, я потратил 5 часов, пытаясь понять то же самое, решение состоит в том, чтобы спроецировать поле TIME / DATE / DATETIME как метку времени UNIX (целое число) в вашем Оператор SQL, использующий UNIX_TIMESTAMP().

Тогда вы можете легко получить поле как time_t (и при желании преобразовать в struct tm).

#include<time.h>

mysqlx::Session session{"mysqlx://root:password@127.0.0.1:33060/catalog"};
auto row = session.sql("SELECT UNIX_TIMESTAMP(create_time) FROM information_schema.tables ORDER BY 1 LIMIT 1").execute().fetchOne();
time_t creationTime = (int) row[0];
struct tm* creationTimePoint = localtime(creationTime);

Надеюсь, это поможет. -Minding

...