Memory leak VB6日期数据类型:精度和格式 VB6Date数据类型的精确度如何(以秒的分数表示) 如何格式化它以显示一秒的分数
在离开多年后,我再次访问VB6,我已经记不起以前知道的事情了。我考虑给这个贴上标签,因为我的记忆泄露了 我后来发现了这个API调用,它似乎可以工作:Memory leak VB6日期数据类型:精度和格式 VB6Date数据类型的精确度如何(以秒的分数表示) 如何格式化它以显示一秒的分数,memory-leak,datetime,vb6,formatting,types,Memory Leak,Datetime,Vb6,Formatting,Types,在离开多年后,我再次访问VB6,我已经记不起以前知道的事情了。我考虑给这个贴上标签,因为我的记忆泄露了 我后来发现了这个API调用,它似乎可以工作: Declare Sub GetSystemTime Lib "kernel32.dll" (lpSystemTime As SystemTime) Public Type SystemTime Year As Integer Month As Integer DayOfWeek As Integer Day As Integer
Declare Sub GetSystemTime Lib "kernel32.dll" (lpSystemTime As SystemTime)
Public Type SystemTime
Year As Integer
Month As Integer
DayOfWeek As Integer
Day As Integer
Hour As Integer
Minute As Integer
Second As Integer
Milliseconds As Integer
End Type
我认为VB6中的日期数据类型不能处理几分之一秒。1)秒,并且
2) 这是不可能的。日期数据类型基于范围检查(最小/最大日期值)加上考虑的历元的双重数据类型。换句话说,它没有什么特别之处,特别是考虑到VBA不是强类型语言 如果你认为时间是一个连续体(我认为你应该这样认为),那么一个
双倍的就很合适了。一天=1(整数)的双精度浮点的精度实际上是小数点后九位。因此,类型为Double
(因此类型为Date
)的值可以轻松地适应亚秒值
但是,您面临的问题是VBA中的时态函数(Now
,DateSerial
,DateDiff
,DateAdd
等)的最小粒度为1秒。如果将它们与存储为Double
且精度为亚秒的日期值一起使用,您将体验到四舍五入到1秒。为VBA6编写的用户控件等同上
当然,您可以编写自己需要的时态函数的实现(我记得必须为StdDataFormat
实现包装类,以便读取/写入亚秒SQL Server值,而无需在VBA中舍入MS数据网格),但这将开始让人感觉您正在滚动自己的时态数据类型(哎哟!)