7. ВРЕМЯ И ТАЙМЕРЫ

 

7.1. Понятия о времени в Visual Basic

Работа Visual Basic со временем заметно отличается от того, как это происходит в повседневной жизни. Для выполнения операций с ним в Visual Basic использу­ются данные типа «Date», для которых основной единицей измерения является день. Один час равен 1/24 дня, а секунда — 1/86400 дня. Неделя будет представлена цифрой 7, поскольку состоит из семи дней. Данные типа «Date» отображают время в соответствии с тем форматом, который установлен на компьютере, — 12- или 24-часовым (см. «Панель управления» Windows).

В юлианском календаре первый день нашей эры — это 1 января 0001 года. Для данных типа «Date» выбрано другое начало отсчета: первый день — это 31 декабря 1899 года, второй день — 1 января 1900 года. Таким образом, 12 июня 1968 года — это день 25001-й или просто 25001 (другими словами, это 25001-й день, если считать от 31 декабря 1899 года). Дата 25001.5 переводится как полдень 12 июня 1968 года. Даты до 31 декабря 1899 года имеют отрицательные значения, например, 4 июля 1776 года — это -45103 день, т.е. 45103 день до 30 декабря 1899 года.

Переменной типа «Date» можно присвоить литерал (т.е. буквальное значение) даты, разместив его между знаками «#», например:

Dim MyDate as Date

MyDate = #January 25, 1999#

 

Примечание

Хотя в Visual Basic обещается поддержка националь­ных форматов даты из панели управления, русскоязычное представление работать от­казывается.

 

Кроме того, тип «Date» можно преобразовать в любой числовой формат. Например, 4 августа 1997 года, 22 часа 56 минут выглядит как 35390.58333 в формате «Double». Все, что находится слева от десятичной точки – это день, а после точки – часы, минуты, секунды и миллисекунды. Обратите внимание, что дробную часть значения менее 1 можно ис­пользовать для указания только времени; например, 0.12345 означает 2:57:46 пополудни.

 

7.2. Элемент управления таймером

В Visual Basic имеется элемент управления таймером – «Timer», который позволяет от­слеживать время. Его можно представлять себе как маленькие часы, которые, будучи включенными, вызывают некоторое программируемое событие через заданный интервал времени. Вызываемое таймером событие называется «Timer», процедура обра­ботки этого события в программе имеет следующий синтаксис:

Private Sub TimeName_Timer ()

·        TimeName – имя элемента управления таймером.

·        Timer – имя события.

 

Время между наступлением событий «Timer» указывается в свойстве «Interval» элемента управления таймером. Единицей измерения интервала времени в этом свойстве является миллисекунда. В следующей строке интервал времени установлен равным полусекунде:

Timer1.Interval = 500

 

Примечание

Максимальное значение свойства «Interval» – 65535. Это означает, что можно установить максимальный интервал между событиями, немного превышающий 65,5 сек. Длительность же наименьшего интервала – 55 мс, так как системные часы изменяют свои показания только 18 раз в секунду.

 

Свойств у элемента управления таймером совсем немного (табл. 10), поскольку главная и единственная его задача состоит в генерации события.

 

Таблица 10

Свойства элемента управления таймером

Свойство

Описание

Name

Имя элемента управления. По умолчанию для первого таймера устанавливается «Timer1», для второго «Timer2» и т.д.

Enabled

Включает/выключает таймер. По умолчанию имеет значение True

Index

Индекс в массиве элементов управления.

Interval

Определяет интервал времени между наступлениями события «Timer»

Left

Определяет координату левого края таймера в форме

Tag

Свойство Tag похоже на переменную, встроенную непосредственно в элемент управления; с его помощью можно хранить данные, доступ к которым необходимо иметь в течение всего времени выполнения программы

Top

Определяет координату верхнего значения таймера в форме

 

 

Примечание

Таймер – это невидимка. Его свойства «Left» и «Tор» совершенно бесполезны, поскольку при работе про­граммы этот элемент управления невидим.

 

 

7.3. Использование команд при работе со временем

Хотя таймер и можно запрограммировать так, чтобы он в определенное время вызывал событие «Timer», сам таймер не знает истинного текущего времени. Чтобы определить текущее время, необходимо обратиться к системным часам компьютера.

Чтобы узнать системное время, используйте функцию «Time», а чтобы узнать системную дату – функцию «Date». Если же необходимо узнать и время, и дату, воспользуйтесь функцией «Now»:

Text1.Text = Time

Label2.Caption = Date

Text3.Text = Now

 

Иногда бывает необходимо получить только количество часов, минут или только название месяца из системного времени. Для этого пользуются следующими функциями:

 

При работе с временными параметрами очень полезными функциями являются следующие:

 

Для ручной установки системного времени и даты применяют следующие операторы:

Time = time    и    Date = date,

которые устанавливают системное время и дату в соответствии со значениями аргументов «time» и «date» соответственно.

 

7.4. Вычисление разницы между датами

Если понадобится написать программу, вычисляющую интервал времени между двумя датами, то необходимо пользоваться функцией «DateDiff», имеющей следующий синтаксис:

MyLong = DateDiff(interval, date1, date2[, week[, year]])

·        MyLong – возвращаемое значение типа «Variant» («Long»);

·        DateDiff – имя самой функции;

·        interval – строка символов, описывающая интервал измерения для разности между двумя датами (см. табл. 11);

·        date1 – начальная дата измеряемого интервала (тип «Date»);

·        date2 – конечная дата измеряемого интервала (тип «Date»);

·        week – константа, устанавливающая первый день недели;

·        year – константа, указывающая первую неделю года.

 

Таблица 11

Значения параметра «interval» функции «DateDiff»

Значения параметра

Интервал

Пример

Итоговое значение

“yyyy”

Год

DateDiff(“yyyy”, “4.7.76”, “4.7.86”)

10

“q”

Квартал

DateDiff(“q”, “4.7.76”, “4.7.86”)

40

“m”

Месяц

DateDiff(“m”, “4.7.76”, “4.7.86”)

120

“y”

День года

DateDiff(“y”, “4.7.76”, “4.7.86”)

3652

“d”

День месяца

DateDiff(“d”, “4.7.76”, “4.7.86”)

3652

“w”

День недели

DateDiff(“w”, “4.7.76”, “4.7.86”)

521

“ww”

Неделя

DateDiff(“ww”, “4.7.76”, “4.7.86”)

521

“h”

Час

DateDiff(“h”, “4.7.76”, “4.7.86”)

87648

“n”

Минута

DateDiff(“n”, “4.7.76”, “4.7.86”)

5258880

“s”

Секунда

DateDiff(“s”, “4.7.76”, “4.7.86”)

315532800

 

Функция «DateDiff» берет первую дату, представленную параметром «date1» и вычитает ее из второй даты, представленной параметром «date2». Выполнив вычитание, функция возвращает числовое значение типа «Long», которое и является разностью дат. Единицу измерения для представления ответа указывают с помощью параметра «interval».

 

7.5. Использование функции «Format» для представления времени

Функция «Format» – это мощная функция Visual Basic, позволяющая управлять отображением строки. Преимущественно эта функция используется для форматирования значений даты, времени и числовых значений, но ее можно использовать любыми и с любыми строковыми значениями. Функция «Format» имеет следующий синтаксис:

MyString = Format(expression, format [, week[, year]])

·        MyStrings возвращаемое строковое значение;

·        Format имя самой функции;

·        expression – любое выражение, представляющее строку символов, дату числовое значение;

·        format – строка-шаблон, которая определяет строку результата.

·        week – необязательная константа, устанавливающая первый день недели. По умолчанию она имеет значение «Sunday» (воскресенье), но можно установить другое значение, например «Monday» (понедельник);

·        year – необязательная константа, указывающая первую неделю года. По умолчанию это неделя, на которую приходится 1 января. Но можно установить и другое значение, например первую полную неделю года.

 

При работе с функцией «Format» основным моментом является умение обращаться с параметром «format», который определяет, как значение параметра «expression» будет преобразовываться в строку символов. В табл. 12 показано, как использовать настройки функции «Format» для форматирования строк с информацией о дате времени.

 

Таблица 12

Примеры предопределенных форматов для отображения времени и даты

Параметр «format»

Пример

Результат

" Long Date"

Format (36000, "Long Date" )

24 Июль 1998 г.

"Medium Date"

Format (36000, "Medium Date" )

24-июл-98

"Short Date"

Format (36000, "Short Date" )

24.07.98

"Long Time"

Format (0.874, "Long Time" )

20:58:34

"Medium Time"

Format (0.874, "Medium Time" )

08:58

"Short Time"

Format (0.874, "Short Time" )

20:58

 

Эту функцию можно использовать для нужного формата отображения любых значений, в том числе числовых. В табл. 13 показано, как использовать функцию «Format» для представления числовых значений в виде строки символов нужного вида, используя предопределенные форматы.

 

Таблица 13

Использование функции формат с числовыми значениями

Параметр «format»

Пример

Результат

"General Number"

Format (36000, "General Number")

36000 

"Currency"

Format (36000, "Currency")

$36,000.00 

" Fixed"

Format (36000, "Fixed" )

36000.00

"Standard"

Format (36000, "Standard")

36 000,00

" Percent"

Format (36000, "Percent" )

3600000,00%

"Scientific"

Format (36000, "Scientific")

3,60E+04

"Yes/No"

Format (36000, "Yes /No")

Yes

"True/False"

Format (36000, "True/False")

True

"On/Off"

Format (36000, "On /Off")

On

 

В функции «Format» можно использовать также собственные форматы пользователя. Они представляют собой специальную маску, по которой будет формироваться итоговая строка. Для формирования маски используются два символа: «#» (необязательный символ) и «0» (обязательный символ). Для добавления в строку некоторых определенных символов их добавляют в маску в нужное место. Пример использования их приведен в таблице 14.

 

Таблица 14

Пример использования маски в функции «Format»

Число

Маска

Результат

23,256

“####.##”

23.256

“####.00 м

23.25 м

“0000.##”

0023.256

“0000.0000 р/чел

0023.2560 р/чел

 

 

Контрольные вопросы для самопроверки

  1. Как в Visual Basic представляется время?
  2. Назначение элемента управления «Timer»? Какими свойствами он обладает?
  3. Как узнать текущее время и дату?
  4. Какие функции для работы со временем вы знаете?
  5. Как представить некоторое значение нужным образом?
  6. Какие предопределенные форматы вы знаете?
  7. Как создать формат пользователя?