Recovery
如何猜測或恢復sqllite中的時間戳轉換?
我正在進行微小的取證工作 =) 我正在嘗試將交易從 Money IQ (IOS) 轉移到 My Wallet+ (IOS),因為這兩個應用程序都使用 sqlite。Money IQ 使用標準的 unixepoch 時間戳。但是,我的錢包+遇到了麻煩。我已將實際日期與範例交易的時間戳相匹配:
actual date | app timestamp 2013-09-03 => 399924000 2013-10-26 => 404424000 2013-11-04 => 405201600 2013-11-04 => 405201600 2013-11-10 => 405720000
我的目標是將 ‘%Y-%m-%d %H:%S’ 轉換為這種格式。我認為該應用程序不會儲存時間戳的時間部分,認為交易發生在午夜。我最好的猜測是 ts 到日期轉換的 H1 和日期到 ts 轉換的 H2 (不准確 14400):
H1: strftime('%Y-%m-%d %H:%S', datetime(zdate, 'unixepoch'), '31 years', 'localtime') H2: strftime('%s', '2013-11-13', '-31 years')
有什麼我遺漏的或者 H2 是最合適的轉換方式嗎?謝謝!
UPD:我擴展了數據集:
timestamp | unix epoch diff | manual note --------------------------------------------------- 321829200 | 2001-01-01 03:00:00 | 2011-03-15 347054400 | 2001-01-01 04:00:00 | 2012-01-01 378676800 | 2001-01-01 04:00:00 | 2013-01-01 395092800 | 2001-01-01 04:00:00 | 2013-07-10 399924000 | 2000-12-31 06:00:00 | 2013-09-03 400881600 | 2001-01-01 04:00:00 | 2013-09-15 404424000 | 2001-01-01 04:00:00 | 2013-10-26 405201600 | 2001-01-01 04:00:00 | 2013-11-04 405201600 | 2001-01-01 04:00:00 | 2013-11-04 405720000 | 2001-01-01 20:53:00 | 2013-11-10 16:53 406411200 | 2001-01-01 16:00:00 | 2013-11-18 12:00
Unix 紀元時間戳定義為自 1970 年初以來的秒數(以 UTC 為單位)。
這些時間戳是從 2001 年初開始測量的,並且似乎使用各自的本地時區:
> select datetime(strftime('%s', '2013-11-10') - 405720000, 'unixepoch'); 2001-01-01 04:00:00 > select strftime('%s', '2013-11-10') - strftime('%s', '2001-01-01 04:00:00'); 405720000
要糾正隨機時區差異,您應該四捨五入到最接近的午夜。
謝謝你,CL。!我相信以下查詢可以解決我的轉換問題:
(strftime('%s', '2013-11-19', 'localtime', 'start of day') - strftime('%s', '2001-01-01 04:00:00'))
我的解決方法是在 excel 或 notepad++ 中生成插入事務,將它們插入數據庫並執行更新查詢以將所有事務從“2013-11-19”格式更新為應用程序內部可用的格式。
如果我考慮從 Money IQ 切換,我還會使用完整的時間戳更新“ztitle”欄位以防萬一。