如何使用 xdevapi 从 mysql 获取日期时间 [英] How to fetch DateTime from mysql using xdevapi
本文介绍了如何使用 xdevapi 从 mysql 获取日期时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我选择一个日期时间字段时,它以 6 个字节的形式返回.如何将其转换为 time_point 或 struct tm?
When I select a dateTime field, it gets returned as 6 bytes. How can I convert it to a time_point or 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
推荐答案
嘿,我只是花了 5 个小时试图找出同样的事情,解决方案是投影 TIME
/DATE
/DATETIME
字段作为 UNIX 时间戳 (integer) 在您的 SQL 语句中使用 UNIX_TIMESTAMP()
.
Hey I just spend 5 hours tring to figure out the same thing, the solution is to project the TIME
/DATE
/DATETIME
field as a UNIX timestamp (integer) in your SQL Statement using UNIX_TIMESTAMP()
.
然后您可以轻松地将字段设为time_t
(并可选择转换为 struct tm
).
Then you can easily get the field as time_t
(and optionally convert to a 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);
希望这会有所帮助.-思考
这篇关于如何使用 xdevapi 从 mysql 获取日期时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文