2014-02-17 111 views
1

所以我試圖從sqlite數據庫轉換時代。我正在使用Timewap類型的時間列。Sqlite時代日期時間轉換

存儲的值是:1383928265(2013年11月8日上午11時31分05秒)http://www.epochconverter.com/

的SQL:

var sql = "SELECT session_id, xml, strftime('%s',stopped), strftime('%s',time), orig_title FROM processed"; 

其結果是:119360752804800(1973年10月13日7: 45:52 AM)

我的轉換器:

public static DateTime FromUnixTime(long unixTime) 
    { 
     var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
     return epoch.AddSeconds(unixTime).ToLocalTime(); 
    } 

我做了一些調整轉換器:

public static DateTime FromUnixTime(long unixTime) 
    { 
     var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
     var s = unixTime/86400; 
     return epoch.AddSeconds(s).ToLocalTime(); 
    } 

但它產生:2013年10月11日上午6點34分37秒

我不能從SQLite數據庫正確的日期。

編輯: 模式

SQLite schema

+0

請不要包含有關問題標題中使用的語言的信息,除非在沒有它的情況下沒有意義。標籤用於此目的。 –

+0

所以你說你在數據庫中存儲時代,然後在選擇你調用strftime從它再次計算時代?我認爲你不應該在你的查詢中使用strftime。 – Mateusz

+0

除了@Mateusz評論,你能告訴我們表的計劃嗎?你在哪個領域保存數據? –

回答

1

您正在使用strftime錯誤。 一個數字被解釋爲公曆日期,除非你使用unixepoch修改:

> SELECT strftime('%s', 1383928265), datetime(1383928265); 
119360535336000 3784354-44914542-14 12:00:00 
> SELECT strftime('%s', 1383928265, 'unixepoch'), datetime(1383928265, 'unixepoch'); 
1383928265  2013-11-08 16:31:05 

然而,在數據庫中的值已經擁有你想要的確切格式,所以你不需要使用strftime在第一名:

SELECT session_id, xml, stopped, time, orig_title FROM processed 
+0

你好,謝謝你的回覆!我使用strftime的原因是因爲當我在C#中運行查詢字符串時,sqlite連接器lib告訴我「字符串未被識別爲有效的DateTime」。所以我試圖在沒有完全理解它的功能的情況下使用strftime。 – JBurlison