yandex rtb 1
ГоловнаЗворотній зв'язок
yande share
Главная->Різні конспекти лекцій->Содержание->4.6.3 Робота з датами й часом

Організація баз даних і знань

4.6.3 Робота з датами й часом

Для того, щоб забезпечити програмістові можливість коректно працювати з датами й часом, VBA надає спеціальний тип даних Date, що зберігає дату й час. Над даними цього типу можна виконувати деякі операції, але при роботі з ними найчастіше використовуються спеціальні вбудовані функції. Спробуємо коротко розглянути основні можливості роботи з датами. Насамперед, помітимо, що можливий діапазон дат охоплює дати від 1.1. 100 року до 1-го січня 9999 року. Якщо говорити про внутрішнє подання дат, що займають 4 байти пам'яті, то ціла частина зберігає число днів від деякої початкової дати, дробова частина зберігає час від опівночі. Початковою датою є 30 грудня 1899 року. Завдяки такому внутрішньому поданню додавання й вирахування цілого числа сприймається як додаток або вирахування днів.

Присвоювання значень

При присвоюванні значень змінним типу дата необхідно містити дату в спеціальні обмежники "#" або задавати її як строкову константу. При завданні дати в обмежниках, наприклад, #9, May, 99 # вона автоматично перетвориться до стандартного формату #5/9/99# (місяць/день/рік). Наведемо приклад деяких дій над датами:

Public Sub WorkWithDates()

  

   'Робота з датами

   Dim dat1 As Date, dat2 As Date, dat3 As Date

  

   'Присвоювання дат

   dat1 = 12

   dat2 = 9/5 / 99

   dat3 = #9/5/1999#

   Debug.Print dat1, dat2, dat3

   dat1 = "15/7/99"

   dat2 = #5/9/1999#

   dat3 = dat3 + 100

   Debug.Print dat1, dat2, dat3

   If dat3 > dat2 Then

      Debug.Print dat3 - dat2

   Else

      Debug.Print dat2 - dat3

   End If

End Sub

Наведемо результати виконання цієї програми:

11.01.1900 0:26:11                   05.09.99

15.07.99                    09.05.99                 14.12.99

 219

 

Вбудовані функції для роботи з датами

Як ми вже зазначали, основна робота з датами виконується з використанням вбудованих функцій. Основні з них:

·          Date - повертає поточну дату.

·          Time - повертає поточний час за годинниками комп'ютера.

·          Now - повертає значення типу Variant (Date), що містить поточну дату й час за системним календарем й годинником комп'ютера.

Обчислення над датами

Функція DateAdd призначена для додавання або віднімання зазначеного тимчасового інтервалу зі значення дати. Зазначте, з її допомогою можна задавати часовий інтервал не тільки в днях, але й у місяцях, роках і так далі:

DateAdd(interval, number, date)

Аргумент interval - рядок, що вказує тип тимчасового інтервалу, що додаєтсья, number - число тимчасових інтервалів, на яке варто змінити дату, date - дата, до якої додається зазначений часовий інтервал. Для приклада, наведемо два виклики цієї функції у вікні налагодження:

? DateAdd("m", 1, "31-січня-95")

28.02.95

? DateAdd("m", -1, "31-січня-95")

31.12.94

Функція DateDiff призначена для визначення часу, що пройшов між двома датами. Наприклад, за допомогою цієї функції можна обчислити число днів між двома датами або число тижнів між поточною датою й кінцем року. Синтаксис:

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

Аргумент interval задає тип тимчасового інтервалу при обчисленні різниці між датами date1 й date2, - його можливі значення ті самі, що й для функції DateAdd, date1 й date2 - дві дати, різницю між якими варто обчислити. firstdayofweek - константа, що вказує перший день тижня (за замовчуванням уважається, що тиждень починається з неділі). firstweekofyear - константа, що вказує перший тиждень року (за замовчуванням першим тижнем уважається тиждень, що містить 1 січня).

Наведемо приклади виклику цієї функції у вікні налагодження:

? DateDiff("m", "18.10.55", "31-січня-95")

471

Функція DateSerial дозволяє обчислити значення дати типу Variant (Date) за її компонентами, - роком, місяцем й днем. Її синтаксис:

DateSerial(year, month, day)

Значення кожного аргументу повинне лежати у відповідному діапазоні: 100 -- 9999 для року, 1 - 31 для днів й 1 - 12 для місяців. Можна також використовувати для аргументів числові вирази для опису відносної дати.

Приклади:

? DateSerial(1997 - 25, 10 - 2, 18 - 1)    

17.08.72

? DateSerial(Year(Now) - 3,Month(Now) - 2, Day(Now) - 1)

08.03.96

Функція DateValue переводить аргумент-рядок у дату. На відміну від функції перетворення CDate, функція DateValue правильно обробляє припустимі дати, що містять повні або короткі назви місяців.

Її синтаксис:

DateValue(date)

Аргумент date може задавати як дату, так і час. Можливі різні формати завдання дати, у тому числі й з назвами місяців.

Остання рівність пов'язана з тим, що при відсутності року, функція DateValue використає поточний рік за системним календарем комп'ютера.

Функції Day(date), Month(date), і Year(date) у деякому змісті є зворотними до двох попередніх. Вони за аргументом-датою визначають номер дня, місяця й року. Функція Weekday(date, [firstdayofweek]) повертає значення типу Variant (Integer), що містить ціле число, яке представляє день тижня. Другий аргумент задає перший день тижня (за замовчуванням - неділя). Значення 2 відповідає понеділку.

Функції Hour(час), Minute(час) і Second(час) за аргументом, який є числовим або строковим виразом, що представляє час, повертає утримуюче ціле число, що представляє, відповідно, годинники, хвилини й секунди в значенні часу.

Функція TimeSerial(hour, minute, second) обчислює результат Variant (Date), що містить значення часу, яке відповідає зазначеним годині, хвилині й секунді.

Функція TimeValue(час) повертає значення типу Variant (Date), що містить час. Аргумент час звичайно задається строковим виразом, що подає час від 0:00:00 (12:00:00 A.M.) до 23:59:59 (11:59:59 P.M.) включно.

 

 

 

 

 

51