2015-07-28 119 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

不,这不是问题。数据库的存活时间与每次运行一样长,每次运行最长时间需要几个小时。好评但并非真正的答案。我从假期回家后找到了一个解决方案。 –