Как получить DateTime из MySQL, используя xdevapi
Когда я выбираю поле 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 ответ
Эй, я потратил 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 = row[0]; //The Value gets automatically converted
struct tm* creationTimePoint = localtime(creationTime);
Надеюсь это поможет. -Minding