我需要将日期周期性地转换为其组成部分(小时,分钟,秒)。以下代码可以很好地做到这一点。
Dim time_hour As Integer
Dim time_minute As Integer
Dim time_second As Integer
Dim time_ms As Integer
Dim storedNow As Date
storedNow = Now
time_hour = storedNow.Hour
time_minute = storedNow.Minute
time_second = storedNow.Second
time_ms = storedNow.Millisecond
但是,我发现这是一个性能问题。我已经使用探查器检查了源代码,现在将Now转换为其组件似乎非常缓慢。有没有一种快速的方法可以将当前时间分解成各个组成部分?
请您参考如下方法:
看一看Extremoptimization.com。关于此有一些有趣的数学思想。这是一个可能的解决方案草图:
Dim ticks As Long
Dim time_hour As Integer
Dim time_minute As Integer
Dim time_second As Integer
Dim time_ms As Integer
Dim storedNow As Date
storedNow = Now
ticks = storedNow.Ticks
time_ms = CInt((ticks \ 10000) Mod 86400000)
time_hour = CInt(Math.BigMul(time_ms >> 7, 9773437) >> 38)
time_ms -= 3600000 * time_hour
time_minute = CInt(((Math.BigMul(time_ms >> 5, 2290650)) >> 32))
time_ms -= 60000 * time_minute
time_second = ((time_ms >> 3) * 67109) >> 23
time_ms -= 1000 * time_second
但小心点。您的源代码将不可维护。这使您的转换非常可靠,但是我不确定是否有人会在第一个 View 上了解您的操作。奖励是一次转换,比经典方法快约25倍。
但是,您仍然应该考虑您的方法,如果无法避免的话。