Я создаю приложение C++, которое будет работать в Ubuntu и будет использовать Sqlite3 в качестве базы данных.C++ и Sqlite3: Как сохранить дату/время с точностью до миллисекунд
Одна из моих целей - иметь класс C++, содержащий поля времени и даты, а затем хранить в базе данных.
В прошлом I've используется time_t
в качестве переменной типа на моем классе и хранили их INTEGER
типа на sqlite3, как:
класса C++:
class MyClass {
time_t dateTimeInfo;
}
Sqlite3:
CREATE TABLE MYCLASS (....., INTEGER DATETIMEINFO, ...);
Этот подход позволяет мне до SELECT
раз с различными опциями сравнения (>, >=, < , <=, ==
) без проблем, так как я имею дело с простым номером. На уровне пользователя time_t
преобразуется в ISO 8601 std::string´s
, так что я могу иметь интерфейс для чтения человеком.
Это работает очень хорошо, за исключением того, что не поддерживает миллисекунды. В моем текущем проекте мне нужно их поддерживать, поэтому мне нужно внести изменения в это.
Насколько я имел исследования я undestand мне нужно использовать std::chrono::time_point
как тип класса, а именно:
C++ Класс:
class MyClass {
std::chrono::time_point dateTimeInfo;
}
Но я действительно не знаю, какой тип данных использовать в sqlite3 и если он будет работать так же, как time_t
используется для ...
sqlite3:
CREATE TABLE MYCLASS (....., ???? DATETIMEINFO, ...);
Мои вопросы:
а) Является ли std::chrono::time_point
правильный вариант здесь?
b) Что такое эквивалент Sqlite3? Еще INTEGER
?
c) Это рекомендуемый подход (нет boost
, пожалуйста, C++ 11)?
Спасибо за помощь.
Вы можете сохранить формат ISO 8601 непосредственно в виде строки и сравнить его с обычными операторами сравнения, если ваши строки сравнения также отформатированы по ISO. Вы пытались это сделать? – huu