2015-07-28 86 views
0

我需要一個32位時間標識符。目前在sqlite中使用strftime('%s','now')在觸發器中設置32位時間標識符。結果表明,每秒一次的分辨率不會爲我們的應用程序削減它,所以我想移動到毫秒並切斷左側位,總共保留32位。我不需要能夠將結果作爲日期時間使用,因爲它將連接到標識符中。該字符串不需要是32位,但它代表的數字必須是。SQLITE:以毫秒爲單位獲取當前時間並適合32位int

回答

0

溶液使用位位移在64個系統:

得到以毫秒的時間與

cast(julianday("now")*100000000 as int) 

然後位位移這個數字左32次,然後右側的相同的次數。這將丟棄前面的位。然後取絕對值。

abs((cast(julianday("now")*100000000 as int) << 32) >> 32) 

and voila!

0

使用32位,您可以得到2 = 4294967296不同的值。

4294967296毫秒僅爲49.7天。

如果你的應用程序在49天后爆炸,你是not alone,但無論如何這不是一個好主意。

甚至使用自1970年以來的秒數is going to run out soon with 32 bits。 您可以使用不同的紀元(例如,2015-01-01,甚至2020-01-01並以負數開頭),但是您需要降低精度,以便能夠從32位中獲得可用範圍。

+0

不,這不是問題。數據庫的存活時間與每次運行一樣長,每次運行最長時間需要幾個小時。好評但並非真正的答案。我從假期回家後找到了一個解決方案。 –

相關問題