Конвертировать поле даты SQLite в C ++ Time_T

Как преобразовать дату SQLite в следующем формате в переменную C ++ Time_T?

YYYY-MM-DD HH:MM:SS

1

Решение

Вы можете прочитать этот вопрос, в котором обсуждаются несколько подходов. В частности, если у вас есть доступ к Boost, вы можете использовать <boost/date_time/posix_time/posix_time.hpp> и создать boost::posix_time::ptime Объект из строки в формате вашего вопроса. (Смотрите первый ответ в этом вопросе.)

Кроме того, вы можете использовать strptime().

Пример:

#include <ctime>
#include <iostream>

std::size_t timestamp_to_seconds(const char* timestamp)
{
std::tm tm_struct;

strptime(timestamp, "%Y-%m-%d %H:%M:%S", &tm_struct);
// You can control daylight savings time if necessary.
tm_struct.tm_isdst = 1;
std::size_t t = std::mktime(&tm_struct);

return t;
}

int main()
{
std::cout << timestamp_to_seconds("2013-07-05 12:34:56") << std::endl;

return 0;
}

Выполнение этого примера дает следующий вывод:

$ ./a.out
1373042096
$ date -d "2013-07-05 12:34:56" +%s
1373042096

Как видите, это согласуется с date полезность. (Я предполагаю, что вы находитесь на платформе с доступом к strptime. Возможно, вам придется быть осторожным при обращении с летним временем или информацией о часовом поясе … Я должен был использовать tm_struct.tm_isdst = 1 заставить распознать летнее время и договориться с date,

2

Другие решения

time_t это метка времени Unix (секунды с 1970-01-01), поэтому вам нужно конвертировать с STRFTIME:

SELECT strftime('%s', '2013-07-05 12:34:56');

Результатом является строка, но вы можете прочитать ее как целочисленное значение.

0

По вопросам рекламы [email protected]