2013-10-23 24 views
2

我正在使用SQLite Maestro查看我昨天的iPhone備份文件,日期字段顯示INTEGER數字 - 例如,我最後一條短信的日期顯示爲404076049.我如何將它轉換爲可讀的日期時間? 我在某處找到了一個例子SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col但是將上述數字轉換爲12-31-1982,這肯定是錯誤的(日期應該是昨天的某個時間)格式化日期從SqLite數據庫中的INTEGER字段(iTunes備份)

任何想法?

回答

4

Mac使用與UNIX紀元時間不同的「紀元時間」。

Unix紀元日期是午夜1970年1月1日UTC(又名格林威治標準時間)

Mac OS的劃時代日期是午夜2001年1月1日UTC。

我不知道如何將日期從整數格式使用SQL語句轉換爲日期字符串,但我不知道如何使用做可可:

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate: intValue]; 

你應該能夠計算差值2個日期系統之間應用,作爲轉換系數:

NSDate *date = [NSDate date]; 
NSTimeInterval secondsSince2001 = [date timeIntervalSinceReferenceDate]; 
NSTimeInterval secondsSince1970 = [date timeIntervalSince1970]; 
long int difference = trunc(secondsSince2001 - secondsSince1970); 

然後,您可以在您的SELECT語句中使用它之前,「差異化」添加到您的整數值。

+0

我確實需要它在SQL中,但感謝您的解釋 – Andrey

+3

但你給了我一個想法 - 這兩個epoh日期之間的差異是978,307,200秒。所以,我可以添加到我的INT日期:'SELECT strftime(「%m-%d-%Y」,日期+ 978307200,'unixepoch')AS date_1'。我正在覈對你的答案,謝謝! – Andrey

+0

Andrey的SQL對我來說工作得很好 - 我從文本消息歷史記錄中創建消息日誌,這是我從iphone備份中獲取的。 iPhone很愚蠢的是沒有顯示每封郵件的實際時間戳,但是這種方法可以讓我直接將電子表格導出到準確的時間。 –