Skip to main content
 首页 » 编程设计

vb.net之将日期转换为小时/分钟/秒非常慢

2025年05月04日16soundcode

我需要将日期周期性地转换为其组成部分(小时,分钟,秒)。以下代码可以很好地做到这一点。

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倍。
但是,您仍然应该考虑您的方法,如果无法避免的话。