2013-07-05 45 views

回答

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達成一致。

+0

C++有更好的日期時間類型函數我對語言非常陌生,time_t是我發現的第一個東西。我嘗試使用boost庫,但試圖使用它時,我收到了很多編譯錯誤。我不知道這是圖書館還是我缺乏理解。 – Talon06

+0

嗨Talon06,請參閱我的編輯一個簡短的例子。希望你可以修改它以適應你的確切目的。 – 2013-07-06 00:35:51

0

time_t是一個Unix時間戳(自1970-01-01秒),所以你必須用strftime轉換:

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

結果是一個字符串,但你可以閱讀它作爲一個整數值。

+0

有沒有辦法在應用程序中執行此操作,還是需要針對該數據庫進行查詢? – Talon06

+0

首先將數據庫中的日期以'time_t'格式存儲起來可能是個好主意。如果你真的想把它們轉換成你的程序,請看RyanMck的答案。 –

+0

是的,轉換是否應該通過C++或SQLite進行是有點不清楚的。當然,SQLite轉換更容易。 – 2013-07-05 19:24:44