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