【发布时间】:2015-09-23 18:36:55
【问题描述】:
我正在构建一个将在 Ubuntu 中运行并将使用 Sqlite3 作为数据库的 C++ 应用程序。
我的目标之一是创建一个包含时间/日期字段的 C++ 类,然后将其存储在数据库中。
过去我在我的类中使用 time_t 作为变量类型,并将它们存储为 Sqlite3 上的 INTEGER 类型,例如:
C++ 类:
class MyClass {
time_t dateTimeInfo;
}
Sqlite3:
CREATE TABLE MYCLASS (....., INTEGER DATETIMEINFO, ...);
这种方法允许我使用不同的比较运算符 (>, >=, < , <=, ==) 进行SELECT 次,因为我正在处理简单的数字。在用户级别,time_t 被转换为 ISO 8601 std::string´s,这样我就可以拥有一个人类可读的界面。
这很好用,只是它不支持毫秒数。在我当前的项目中,我需要支持他们,所以我需要对此进行更改。
据我所知,我需要使用 std::chrono::time_point 作为类类型,如下所示:
C++ 类:
class MyClass {
std::chrono::time_point dateTimeInfo;
}
但我真的不知道在 Sqlite3 中使用什么数据类型,以及它是否会像 time_t 过去那样工作......
Sqlite3:
CREATE TABLE MYCLASS (....., ???? DATETIMEINFO, ...);
我的问题:
a) std::chrono::time_point 是这里的正确选项吗?
b) Sqlite3 类型等价物是什么?还是INTEGER?
c) 这是推荐的方法吗(请不要boost,C++11)?
感谢您的帮助。
【问题讨论】:
-
您可以将 ISO 8601 格式直接存储为字符串,并使用普通比较运算符进行比较,只要您的比较字符串也是 ISO 格式。你尝试过吗?