VB6日期数据类型:精度和格式化

4
  1. VB6 Date 数据类型的精度有多高(以秒的分数表示)?
  2. 如何格式化以显示秒的分数?

我已经多年没有接触 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
3个回答

9
Date数据类型基于Double数据类型,具有范围检查(最小/最大日期值)和考虑到纪元的特点。换句话说,这并没有什么特别之处,特别是考虑到VBA不是强类型语言。
如果您将时间视为连续的(在我看来应该如此),那么Double是一个很好的选择。双精度浮点数的精度,其中一天=1(整数),实际上相当于九个小数位。因此,Double类型的值(因此也是Date类型的值)可以轻松容纳亚秒级值。
然而,您面临的问题是VBA中的时间函数(NowDateSerialDateDiffDateAdd等)具有最小粒度为一秒钟。如果您将日期值存储为带有亚秒精度的Double类型,并使用它们,您将经历舍入到一秒钟的情况。同样适用于为VBA6编写的用户控件等。
当然,您可以编写自己所需的时间函数的实现(我记得不得不实现StdDataFormat的包装类,以便在VBA中读取/写入亚秒SQL Server值而不将其舍入到MS Data Grid中),但这将开始感觉像您正在编写自己的时间数据类型(痛!)

3

1) 只有秒数。

2) 没有办法。


1

我认为在VB6中,日期数据类型无法处理秒的小数部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接