Memory leak VB6日期数据类型:精度和格式 VB6Date数据类型的精确度如何(以秒的分数表示) 如何格式化它以显示一秒的分数

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

在离开多年后,我再次访问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
  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数据网格),但这将开始让人感觉您正在滚动自己的时态数据类型(哎哟!)