如何使用 xdevapi 从 mysql 获取日期时间 [英] How to fetch DateTime from mysql using xdevapi

查看:97
本文介绍了如何使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆