[英]Convert SQLite Date Field to C++ Time_T
如何將以下格式的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年1月1日以來的秒數),因此您必須使用strftime進行轉換:
SELECT strftime('%s', '2013-07-05 12:34:56');
結果是一個字符串,但是您可以將其讀取為整數值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.