Recovery

如何猜測或恢復sqllite中的時間戳轉換?

  • November 19, 2013

我正在進行微小的取證工作 =) 我正在嘗試將交易從 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”欄位以防萬一。

引用自:https://dba.stackexchange.com/questions/53468