int类型的datetime表示如下,13:32:53:600 => 133253600,我想将int类型的datetime转换为从当天0:00:00开始经过的毫秒数。例如,133253600 => 48773600。
13:32:53:600 => 133253600
133253600 => 48773600
quhf5bfb1#
考虑 HHMMSSmmm 形式的数字,其中 HH 是十进制小时数,MM 是十进制分钟数,SS 是十进制秒数,mmm 是十进制毫秒数。
类似地,MM00000表示100,000·MM 毫秒,但在 MM 分钟中只有60,000·MM 毫秒。它多了40,000·MM 毫秒,所以我们可以通过减去40,000·MM 来纠正它。
我们可以通过使用C的截断除法将 HHMMSSmmm 除以10,000,000来容易地找到 HH。分离会议记录需要更多的工作。除以100,000将给予 HHMM,然后我们需要取余数来分离 MM。然而,相反,我们可以重写校正以直接使用 HHMM。给定某个 x 为 HHMMSSmmm,我们需要 x − HH·6,400,000 − MM·40,000。加减 HH00·40,000不会改变数字,因此:
如上所述,HH 可以在C中计算为x/10000000,HHMM 可以计算为x/100000。因此,给出我们所需结果的表达式是x - x/10000000*2400000 - x/100000*40000,它使用四个乘法/除法运算和两个加法/减法运算。
x/10000000
x/100000
x - x/10000000*2400000 - x/100000*40000
6yoyoihd2#
你必须除以10000000(只保留整数)才能得到小时(前2个数字),100000得到前4个,1000得到前6个,等等。有了这些数字,你就可以用模数100来得到这个数字的最后2位,用模数1000来保留最后3位。你要做的最后一件事就是把它们转换成毫秒,就是这样。
int time=133253600 //example int hours = time/ 10000000; int minutes = (time/ 100000) % 100; int seconds = (time/ 1000) % 100; int milliseconds = time% 1000; int timeInMs = (hours * 3600000) + (minutes * 60000) + (seconds * 1000) + milliseconds;
它不使用8个操作,但我无法想象你怎么能在更少的操作上做到这一点。你可以通过除以更小的数字来优化,如果你做一个操作取决于前一个,也许。
41zrol4v3#
结果计算如下:
r = ( ( ( H * 60 ) + M ) * 60 ) + S ) * 1000 + milli;
所以如果我们包括获取组件,那就是
t = 133253600; H = t / 10000000; M = t / 100000 % 100; S = t / 1000 % 100; milli = t % 1000; r = ( ( ( H * 60 ) + M ) * 60 ) + S ) * 1000 + milli;
但是秒数在技术上已经是正确的了。
t = 133253600; H = t / 10000000; M = t / 100000 % 100; milli = t % 100000; r = ( ( H * 60 ) + M ) * 60 + milli;
这是所需的8个操作。4个除法,2个乘法和2个加法。
3条答案
按热度按时间quhf5bfb1#
考虑 HHMMSSmmm 形式的数字,其中 HH 是十进制小时数,MM 是十进制分钟数,SS 是十进制秒数,mmm 是十进制毫秒数。
类似地,MM00000表示100,000·MM 毫秒,但在 MM 分钟中只有60,000·MM 毫秒。它多了40,000·MM 毫秒,所以我们可以通过减去40,000·MM 来纠正它。
我们可以通过使用C的截断除法将 HHMMSSmmm 除以10,000,000来容易地找到 HH。分离会议记录需要更多的工作。除以100,000将给予 HHMM,然后我们需要取余数来分离 MM。然而,相反,我们可以重写校正以直接使用 HHMM。
给定某个 x 为 HHMMSSmmm,我们需要 x − HH·6,400,000 − MM·40,000。加减 HH00·40,000不会改变数字,因此:
如上所述,HH 可以在C中计算为
x/10000000
,HHMM 可以计算为x/100000
。因此,给出我们所需结果的表达式是
x - x/10000000*2400000 - x/100000*40000
,它使用四个乘法/除法运算和两个加法/减法运算。6yoyoihd2#
你必须除以10000000(只保留整数)才能得到小时(前2个数字),100000得到前4个,1000得到前6个,等等。有了这些数字,你就可以用模数100来得到这个数字的最后2位,用模数1000来保留最后3位。你要做的最后一件事就是把它们转换成毫秒,就是这样。
它不使用8个操作,但我无法想象你怎么能在更少的操作上做到这一点。你可以通过除以更小的数字来优化,如果你做一个操作取决于前一个,也许。
41zrol4v3#
结果计算如下:
所以如果我们包括获取组件,那就是
但是秒数在技术上已经是正确的了。
这是所需的8个操作。4个除法,2个乘法和2个加法。