c++ - 如何使用 xdevapi 从 mysql 获取 DateTime
问题描述
当我选择一个 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
解决方案
嘿,我只花了 5 个小时来弄清楚同样的事情,解决方案是将//TIME
字段投影为SQL 语句中的 UNIX 时间戳(整数) ,使用.DATE
DATETIME
UNIX_TIMESTAMP()
然后,您可以轻松地将字段设为time_t
(并可选择转换为 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);
希望这可以帮助。-介意
推荐阅读
- tensorflow - 窗口 10 上 NCCL 的替代方案
- java - 是否有可能从不同类的同一端口上的套接字写入/读取
- spring-boot - 双向关系在 OneToMany 上返回空集,仅适用于 ManyToOne
- flutter - InkWell 点击的 Flutter 小部件测试失败
- android - 如何在范围内选择日期?
- c# - 这两个 LINQ 查询有什么区别以及如何正确优化它们?
- xamarin.forms - Xamarin.forms NavigationBar Title 为 IOS 设置文本颜色
- python - 如何在 Python 中使用 Re 库在括号和字符串之间添加空格?
- javascript - 有条件地操作数组中元素的属性
- excel - 比较和更新两个不同 excel 文件中的 excel 列