Обробка даних типу дата/час

Обробка даних, що використовуються для позначення часових значень та інтервалів у програмуванні, завжди вимагає особливої уваги, оскільки ці величини мають бути представлені так, щоб з ними можна було виконувати обчислення, з одного боку, а з іншого — подавати результати цих обчислень у вигляді днів, місяців, годин, хвилин, тощо. Тому кожна мова програмування має свій набір інструментів та правил перетворення значень дати та часу з вигляду зрозумілого користувачеві до вигляду придатного для зберігання та обчислень на ПК і навпаки. У OpenOffice.org Basic передбачені наступні групи інструкцій для роботи з даними типу час та дата.

Інструкції для отримання системних дати та часу:
Функція Now() визначає значення типу Date, що містить поточну дату і час за системним календарем і годинником комп’ютера.
Окремо поточну дату та системний час можна отримати за допомогою інструкцій Date та Time відповідно. Для прикладу, інструкції
MsgBox Now()
та
MsgBox Date & ” “ & Time
взаємозамінні, оскільки виводять однакове повідомлення. У довідковій системі OpenOffice зазначається, що інструкцій Date та Time дозволяють не тільки отримувати, а й встановлювати системну дату та час, але, зрозуміло, ця можливість залежить від налаштувань операційної системи.

Функція Timer() визначає число – кількість секунд, що пройшли після опівночі. Найчастіше ви користовується для вимірювання часу виконання інструкцій макроса, з чим і асоційована її назва. Наприклад, наступний макрос визначає через скільки секунд користувач закрив вікно повідомлення:

Sub TimerDemo()
T = Timer()
MsgBox “Трохи почекайте”
MsgBox “Час очікування “ & Timer() – T & ” с.”
End Sub

Наступна група функцій використовується для маніпуляцій з даними типу Date. Стандартний тип даних Date має власне внутрішнє представлення у пам’яті комп’ютера, що викликає певні труднощі при введенні дати як послідовності чисел, чи текстового рядка. Роботу з перетворення дати з “людинозрозумілого” вигляду у комп’ютерне представлення виконують функції DateSerial та DateValue.

Функція DateSerial(рік, місяця, день)
генерує дату за заданими:

  • роком – цілочисельним виразом, причому значення від 0 до 99 інтерпретуються як роки 1900-1999, а інші роки потрібно задавати чотирма цифрами;
  • місяцем – цілочисельним виразом з допустимими значеннями від 1 до 12;
  • днем – цілочисельним виразом з допустимими значеннями від 1 до 31.

Функція DateSerial повертає кількість днів, що пройшла від 30 грудня 1899 року до вказаної дати, що власне і є внутрішнім представленням дати у OpenOffice.org Basic (дані типу Variant з VarType 7 (Date)).

Подібну дію виконує функція DateValue(дата), але її аргументом дата має бути текстовий рядок, який зображає дату у текстовому “людинозрозумілому” форматі, наприклад, рядки “12.31.12″, “31.12.12″, “31.12.2012″ перетворюються цією функцією у дату 31 грудня 2012 року. OOo Basic автоматично розпізнає форматовану дату, зокрема, результат функції DateValue залежить від регіональних налаштувань операційної системи. Це потрібно враховувати при її використанні для запобігання помилок.

Функції Day(дата), Month(дата) та Year(дата) дозволяють виділити із вказаної дати ціле число, що відповідає, дню в місяці, номеру місяця та року відповідно, тобто, виконують дію протилежну до дії функції DateSerial. Крім того, можна визначити номер дня у тиждні на який припадала задана дата за допомогою функції WeekDay(дата).

Подібний набір функцій Ooo Basic має для обробки даних типу час. Так функції Hour(час), Minute(час), Second(час) виділяють значення типу Variant (Integer), що містить ціле число, яке задає відповідно години, хвилини та секунди у значенні часу.

Зворотну дію, тобто переведення кількості годин, хвилин та секунд у величину типу Date (час) для її зберігання у пам’яті комп’ютера виконують функції TimeSerial та TimeValue. Подібно до DateSerial та DateValue функція

TimeSerial (години, хвилини, секунди)

перетворює набір з цілих чисел (години — ціле число від 0 до 23, хвилини, секунди — цілі числа від 0 до 59) у величину типу Date (час), а функція

TimeValue(текст)

утворює час на основі заданого форматованого у текстовому вигляді (тип String) часу.