Как преобразовать дату SQLite в следующем формате в переменную C ++ Time_T?
YYYY-MM-DD HH:MM:SS
Вы можете прочитать этот вопрос, в котором обсуждаются несколько подходов. В частности, если у вас есть доступ к 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
,
time_t
это метка времени Unix (секунды с 1970-01-01), поэтому вам нужно конвертировать с STRFTIME:
SELECT strftime('%s', '2013-07-05 12:34:56');
Результатом является строка, но вы можете прочитать ее как целочисленное значение.