VB6 Тип данных даты: точность и форматирование - PullRequest
3 голосов
/ 09 октября 2008
  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 голосов
/ 09 октября 2008

Тип данных Date основан на типе данных Double с проверкой диапазона (мин. / Макс. Значения даты) и рассматриваемой эпохой. Другими словами, в этом нет ничего особенного, особенно если учесть, что VBA не является строго типизированным языком.

Если вы думаете о времени в континууме (и IMO, вы должны), тогда Double хорошо подходит. Точность для чисел с плавающей запятой двойной точности, где один день = 1 (целое число) составляет девять знаков после запятой. Таким образом, значение типа Double (и, следовательно, типа Date) может с комфортом вмещать подсекундные значения.

Однако проблема, с которой вы сталкиваетесь, заключается в том, что временные функции в VBA (Now, DateSerial, DateDiff, DateAdd и т. Д.) Имеют минимальную гранулярность одну секунду . Если вы используете их со значениями даты, хранящимися как Double с точностью до секунды, вы получите округление до одной секунды. То же самое для пользовательских элементов управления и т. Д. Написано для VBA6.

Вы могли бы написать свою собственную реализацию временных функций, которые вам требуются, конечно (я вспоминаю о необходимости реализации классов-оболочек для StdDataFormat, чтобы считывать / записывать подсекундные значения SQL Server без округления в MS Data Grid в VBA), но вы начнете чувствовать, что вы катите свой собственный временной тип данных (ой!)

3 голосов
/ 09 октября 2008

1) только секунды и

2) Нет пути.

1 голос
/ 09 октября 2008

Я думаю, что тип данных Date в VB6 не может обрабатывать доли секунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...