如何将以下格式的SQLite日期转换为C ++ Time_T变量?
YYYY-MM-DD HH:MM:SS
答案 0 :(得分:2)
您可能希望阅读this question,其中讨论了一些方法。特别是,如果您有权访问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
达成协议。
答案 1 :(得分:0)
time_t
是Unix时间戳(自1970-01-01以来的秒数),因此您必须使用strftime进行转换:
SELECT strftime('%s', '2013-07-05 12:34:56');
结果是一个字符串,但您可以将其读作整数值。