2015-03-08 51 views
1

我的SQLite數據庫中有兩行,時間戳爲2月7日星期六,3月6日星期五。SqlLite unix時代轉換

我運行此查詢:

select strftime('%w', datetime(CreationDate/1000, 'unixepoch')), 
     datetime(CreationDate/1000, 'unixepoch'), 
     CreationDate from mytable 

輸出是:

"6" "2015-03-07 02:17:02" "1425694622000" 
"6" "2015-02-07 05:00:00" "1423285200000" 

所以清楚什麼是錯的,它說這兩個時間戳是上週六。我認爲問題在於,在將它轉換爲unix時期之前,我將時間戳記除以1000,並且datetime不喜歡這樣嗎?

什麼是建議找回日期時間的正確日期?我真的需要以毫秒爲單位存儲事物,而不是其他時間。

+0

'1425694622000/1000'是2015年3月7日*的UTC *。也許你被時區弄糊塗了?我已經更新了我的答案來解釋這一點。 – Schwern 2015-03-08 19:18:55

+1

非常感謝,這就是它! – NullHypothesis 2015-03-09 01:50:52

回答

2

結果是正確的,2015年2月7日和2015年3月7日都是星期六。請記住,2月份的非閏年有28天,平均分爲7天,因此3月份的日期將有一週的相同日期。

$ cal 2015 
          2015 

     January    February    March 
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 
      1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7 
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14 
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21 
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28 
25 26 27 28 29 30 31      29 30 31 

您可能會被時區弄糊塗了。 Unix time is the number of seconds since January 1st, 1970 UTC。默認SQLite date functions will use the UTC time zone。如果你想在本地時區使用你的時間,你必須告訴SQLite。

sqlite> select strftime('%w', datetime(1425694622000/1000, 'unixepoch')); 
6 
sqlite> select strftime('%w', datetime(1425694622000/1000, 'unixepoch'), "localtime"); 
5 

它可以通過datetime或strftime完成。我選擇了strftime,因爲時區使一切變得複雜,所以我想盡可能在​​格式化階段添加它。

+1

非常感謝你 - 非常感謝你對此事的幫助。這正是手頭的問題。 – NullHypothesis 2015-03-09 01:50:44