
C _Учебник_МОНУ
.pdf
|
Типи опрацювання дати і часу |
349 |
|
|
|
|
Продовження табл. 10.5 |
|
|
|
|
|
|
|
|
Синтаксис функції |
Опис |
|
|
|
|
|
||
bool IsValidDateTime |
Визначає допустимість значень року, місяця, |
|
||
(Word Year, Word Month, |
дня, години, хвилини, секунди та мілісекунди |
|
||
Word Day, Word Hour, |
і повертає true якщо Year належить діапазону |
|
||
Word Minute, Word Sec, |
|
|||
від 1 до 9999 , Month – від 1 до 12, Day – від 1 |
|
|||
Word MSec); |
|
|||
до кількості днів цього місяця, години Hour – |
|
|||
|
|
|
||
|
|
від 0 до 24 (якщо Hour є 24, то Minute, Sec та |
|
|
|
|
MSec мають бути 0), Minute та Sec – від 0 до |
|
|
|
|
59, MSec – від 0 до 999; інакше повертає false |
|
|
bool IsValidDateWeek |
Подібно до функції IsValidDate() визначає |
|
||
(Word Year, Word WeekOfYear, |
допустимість значень року Year, номера тиж- |
|
||
Word DayOfWeek); |
ня цього року WeekOfYear і дня тижня |
|
|
|
|
|
|
|
|
|
|
DayOfWeek (від 1 до 7) |
|
|
bool IsValidTime(Word Hour, |
Подібно до функції IsValidDateTime() |
|
|
|
Word Minute, Word Second, |
визначає допустимість параметрів часу |
|
|
|
Word MSec); |
|
|
|
|
Word MilliSecondOf |
Виокремлює значення мілісекунд (в межах |
|
|
|
(TDateTime dt); |
від 0 до 999) заданого часу dt |
|
|
|
unsigned MilliSecondOfTheDay |
Повертає кількість мілісекунд, які сплинули |
|
||
(TDateTime Time); |
від початку цього дня до часу Time |
|
|
|
unsigned MilliSecondOfTheHour |
Повертає кількість мілісекунд, які сплинули |
|
||
(TDateTime Time); |
від початку години заданого часу Time |
|
|
|
unsigned |
Повертає кількість мілісекунд, які сплинули |
|
||
MilliSecondOfTheMinute |
від початку хвилини заданого часу Time |
|
|
|
(TDateTime Time); |
|
|
|
|
|
|
|
||
unsigned |
Повертає кількість мілісекунд, які сплинули |
|
||
MilliSecondOfTheMonth |
від початку місяця заданої дати dt |
|
|
|
(TDateTime dt); |
|
|
|
|
unsigned |
Повертає кількість мілісекунд, які сплинули |
|
||
MilliSecondOfTheSecond |
від початку секунди заданого часу Time |
|
|
|
(TDateTime Time); |
|
|
|
|
|
|
|
||
unsigned MilliSecondOfTheWeek |
Повертає кількість мілісекунд, які сплинули |
|
||
(TDateTime dt); |
від початку тижня заданої дати dt |
|
|
|
int MilliSecondOfTheYear |
Повертає кількість мілісекунд, які сплинули |
|
||
(TDateTime dt); |
від початку року заданої дати dt |
|
|
|
int MilliSecondsBetween |
Повертає цілу кількість мілісекунд поміж |
|
|
|
(TDateTime Now, |
Now і Athen |
|
|
|
TDateTime Athen); |
|
|
|
|
|
|
|
|
|
double MilliSecondSpan |
Повертає дійсне значення кількості |
|
|
|
(TDateTime Now, |
мілісекунд поміж Now і Athen |
|
|
|
TDateTime Athen); |
(з урахуванням частини мілісекунди) |
|
|
|
|
|
|
|
|
Word MinuteOf |
Виокремлює значення хвилин заданого часу |
|
||
(TDateTime Time); |
Time (значення від 0 до 59) |
|
|
350 |
Розділ 10 |
|
|
|
|
Продовження табл. 10.5 |
|
|
|
|
|
|
Синтаксис функції |
Опис |
|
|
|
|
|
Word MinuteOfTheDay |
Повертає кількість хвилин, які сплинули |
|
|
(TDateTime dt); |
від початку дня до заданого значення dt |
|
|
Word MinuteOfTheHour |
Аналогічно до MinuteOf() повертає кількість хви- |
|
|
(TDateTime Time); |
лин, які сплинули від початку години заданого часу |
|
|
|
|
Time (значення від 0 до 59) |
|
Word MinuteOfTheMonth |
Повертає кількість хвилин, які сплинули |
|
|
(TDateTime dt); |
від початку місяця заданої дати dt |
|
|
Word MinuteOfTheWeek |
Повертає кількість хвилин, які сплинули |
|
|
(TDateTime dt); |
від початку тижня заданої дати dt |
|
|
unsigned MinuteOfTheYear |
Повертає кількість хвилин, які сплинули |
|
|
(TDateTime dt); |
від початку року заданої дати dt |
|
|
int MinutesBetween |
Повертає цілу кількість хвилин поміж |
|
|
(TDateTime Now, |
Now і Athen |
|
|
TDateTime Athen); |
|
|
|
|
|
|
|
double MinuteSpan |
Повертає дійсне значення кількості хвилин поміж |
|
|
(TDateTime Now, |
Now і Athen (з урахуванням частини хвилини) |
|
|
TDateTime Athen); |
|
|
|
Word MonthOf |
Повертає номер місяця заданої дати dt |
|
|
(TDateTime dt); |
(значення від 1 до 12) |
|
|
Word MonthOfTheYear |
Аналогічно до MonthOf() повертає кількість міся- |
|
|
(TDateTime dt); |
ців від початку року заданої дати dt (від 1 до 12) |
|
|
|
|
|
|
int MonthsBetween |
Повертає цілу кількість місяців поміж |
|
|
(TDateTime Now, |
датами Now і Athen |
|
|
TDateTime Athen); |
|
|
|
|
|
|
|
double MonthSpan |
Повертає дійсне значення кількості місяців |
|
|
(TDateTime Now, |
поміж датами Now і Athen |
|
|
TDateTime Athen); |
(з урахуванням частини року) |
|
|
TDateTime Now(); |
Повертає поточні системні дату і час |
|
|
Word NthDayOfWeek |
Визначає для дати dt порядковий номер цього |
|
|
(TDateTime dt); |
дня тижня у цьому місяці |
|
|
TDateTime RecodeDate |
Змінює дату dt на нові значення року Year, |
|
|
(TDateTime dt, Word Year, |
місяця Month, дня Day. Значення року має бути |
|
|
Word Month, Word Day); |
в межах від 1 до 9999, місяць – від 1 до 12, день – не |
|
|
|
|
|
|
|
|
перевищувати кількості днів відповідного місяця |
|
TDateTime RecodeDateTime |
Змінює дату і час dt на нові значення року Year, |
|
|
(TDateTime dt, Word Year, |
місяця Month, дня Day, години Hour, |
|
|
Word Month, Word Day, |
хвилини Minute, секунди Second |
|
|
Word Hour, Word Minute, |
|
||
та мілісекунди MSec |
|
||
Word Second, Word MSec); |
|
|
|
TDateTime RecodeDay |
Змінює день дати dt на значення Day. |
|
|
(TDateTime dt, Word Day); |
Можливе значення Day має не перевищувати |
|
|
|
|
кількості днів відповідного місяця |
|
|
|
Типи опрацювання дати і часу |
351 |
|
|
|
|
Продовження табл. 10.5 |
|||
|
|
|
|
|
|
|
Синтаксис функції |
Опис |
|
|
|
|
|
|
|
||
TDateTime RecodeHour |
Змінює годину заданого часу dtна значення Hour. |
|
|
||
(TDateTime dt, |
Нове значення Hour має перебувати в межах від 0 до 24 |
||||
Word Hour); |
|
|
|
||
|
|
|
|
||
TDateTime |
Змінює мілісекунду заданого часу dt |
|
|
||
RecodeMilliSecond |
на значення MSec. Нове значення MSec має бути |
|
|
||
(TDateTime dt, |
|
|
|||
в межах від 1 до 999 |
|
|
|||
Word MSec); |
|
|
|||
|
|
|
|||
|
|
|
|
||
TDateTime RecodeMinute |
Змінює хвилину заданого часу dt на значення |
|
|
||
(TDateTime dt, |
Minute. Нове значення Minute має бути в межах |
|
|
||
Word Minute); |
від 0 до 59 |
|
|
||
TDateTime RecodeMonth |
Змінює місяць дати dt на нове значення Month. |
|
|
||
(TDateTime dt, |
Нове значення Month має бути в межах від 1 до 12 |
||||
Word Month); |
|
|
|
||
|
|
|
|
||
TDateTime RecodeSecond |
Змінює секунду заданого часу dt на значення Sec. |
|
|
||
(TDateTime dt, |
Нове значення Sec має бути в межах від 0 до 59 |
|
|
||
Word Sec); |
|
|
|||
|
|
|
|||
|
|
|
|
||
TDateTime RecodeTime |
Змінює час dt на нові значення години Hour, |
|
|
||
(TDateTime dt, Word Hour, |
хвилини Minute, секунди Second та мілісекунди |
|
|
||
Word Minute, |
MSec |
|
|
||
Word Second, Word MSec); |
|
|
|||
TDateTime RecodeYear |
Змінює рік дати dt на нове значення Year. |
|
|
||
(TDateTime dt, |
Нове значення Year має бути в межах від 1 до 9999 |
||||
Word Year); |
|||||
|
|
|
|||
void ReplaceDate |
Змінює дату dt на нове значення NewDate; |
|
|
||
(TDateTime &dt, |
час залишається без змін |
|
|
||
TDateTime NewDate); |
|
|
|
||
|
|
|
|
||
void ReplaceTime |
Змінює час dt на нове значення NewTime; |
|
|
||
(TDateTime &dt, |
дата залишається без змін |
|
|
||
TDateTime NewTime); |
|
|
|||
|
|
|
|||
bool SameDate(TDateTime |
Повертає true, якщо обидві дати d1і d2 (день, місяць |
||||
d1, TDateTime d2); |
та рік) збігаються; значення часу ігнорується |
|
|
||
bool SameDateTime |
Повертає true, якщо обидва значення dt1 та dt2 |
|
|
||
(TDateTime dt1, |
(рік, місяць, день, година, хвилина, |
|
|
||
TDateTime dt2); |
секунда і мілісекунда) збігаються |
|
|
||
|
|
|
|
||
bool SameTime |
Повертає true, якщо всі параметри обох значень |
|
|
||
(TDateTime t1, |
часу t1 і t2 (година, хвилина, секунда і мілісекунда) |
||||
TDateTime t2); |
|||||
збігаються; значення дат ігнорується |
|
|
|||
|
|
|
|
||
Word SecondOf |
Повертає значення секунд заданого часу t. |
|
|
||
(TDateTime t); |
Функція є подібною до SecondOfTheMinute() |
|
|
||
|
|
|
|
||
unsigned SecondOfTheDay |
Повертає кількість секунд, що сплили від початку |
||||
(TDateTime dt); |
дня до часу dt |
|
|
||
Word SecondOfTheHour |
Повертає кількість секунд, що сплили |
|
|
||
(TDateTime dt); |
від початку години заданого часу dt |
|
|
352 |
Розділ 10 |
|
|
|
|
Продовження табл. 10.5 |
|
|
|
|
|
|
Синтаксис функції |
Опис |
|
|
|
|
|
Word SecondOfTheMinute |
Повертає кількість секунд, що сплили від |
|
|
(TDateTime dt); |
початку хвилини заданого часу dt. |
|
|
|
|
Функція є подібною до SecondOf() |
|
|
|
|
|
unsigned SecondOfTheMonth |
Повертає кількість секунд, що сплили |
|
|
(TDateTime dt); |
від початку першого місяця заданої дати dt |
|
|
|
|
|
|
unsigned SecondOfTheWeek |
Повертає кількість секунд, що сплили |
|
|
(TDateTime dt); |
від початку тижня заданої дати dt |
|
|
|
|
|
|
unsigned SecondOfTheYear |
Повертає кількість секунд, що сплили |
|
|
(TDateTime dt); |
від початку року заданої дати dt |
|
|
int SecondsBetween |
Повертає цілу кількість секунд |
|
|
(TDateTime Now, TDateTime Athen) |
поміж Now і Athen |
|
|
double SecondSpan |
Повертає дійсне значення кількості секунд |
|
|
(TDateTime Now, |
поміж Now і Athen |
|
|
TDateTime Athen) |
(з урахуванням частини секунди) |
|
|
|
|
|
|
TDateTime StartOfADay |
Формує значення типу TDateTime на |
|
|
(Word Year, Word Month, |
початок дня Day місяця Month року Year |
|
|
Word Day); |
|
|
|
|
|
|
|
TDateTime StartOfAMonth |
Формує значення типу TDateTimeна поча- |
|
|
(Word Year, Word Month); |
ток першого дня місяця Month року Year |
|
|
|
|
|
|
TDateTime StartOfAWeek |
Формує значення типу TDateTime |
|
|
(Word Year, Word |
на початок дня тижня DayOfWeek |
|
|
WeekOfYear,Word DayOfWeek); |
тижня року DayOfWeek року Year |
|
|
|
|
|
|
TDateTime StartOfAYear |
Формує значення типу TDateTime |
|
|
(Word Year); |
на початок року Year |
|
|
|
|
|
|
TDateTime StartOfTheDay |
Формує значення типу TDateTime |
|
|
(TDateTime dt); |
на початок зазначеного дня dt |
|
|
|
|
|
|
TDateTime StartOfTheMonth |
Формує значення типу TDateTime |
|
|
(TDateTime dt); |
на початок місяця заданої дати dt |
|
|
|
|
|
|
TDateTime StartOfTheWeek |
Формує значення типу TDateTime |
|
|
(TDateTime dt); |
на початок тижня заданої дати dt |
|
|
|
|
|
|
TDateTime StartOfTheYear |
Формує значення типу TDateTime |
|
|
(TDateTime dt); |
на початок року заданої дати dt |
|
|
|
|
|
|
TDateTime Time(); |
Повертає поточний системний час |
|
|
TDateTime Today(); |
Повертає поточну системну дату |
|
|
TDateTime Tomorrow(); |
Повертає дату завтрашнього дня |
|
|
bool TryEncodeDate(Word Year, |
Перетворює рік Year, місяць Month, |
|
|
Word Month, Word Day, |
день Day на дату Date. |
|
|
TDateTime &Date); |
Повертає false у випадку помилки |
|
|
|
|
|
|
bool TryEncodeTime(Word Hour, |
Перетворює годину Hour, хвилину Minute, |
|
|
Word Minute, Word Sec, |
секунду Minute і мілісекунду MSecна час |
|
|
Word MSec, TDateTime &Time); |
Time. Повертає false у випадку помилки |
|
|
|
|
|
|
Типи опрацювання дати і часу |
353 |
|
||
|
|
Закінчення табл. 10.5 |
|||
|
|
|
|
|
|
|
Синтаксис функції |
Опис |
|
|
|
|
|
||||
bool TryEncodeDateDay |
Перетворює рік Year, день року DayOfYear на |
||||
(Word Year, Word DayOfYear, |
дату Date. Повертає false у випадку помилки |
||||
TDateTime &Date); |
|
|
|
||
bool TryEncodeDateMonthWeek |
Перетворює рік Year, місяць Month, |
тиждень |
|||
(Word Year, Word Month, |
місяця WeekOfMonth, день тижня DayOfWeek |
||||
Word WeekOfMonth, Word |
|||||
(1 – понеділок) на дату Date. |
|
|
|||
DayOfWeek, TDateTime &Date); |
|
|
|||
Повертає false у випадку помилки |
|
|
|||
bool TryEncodeDateTime (Word |
Формує dtтипу TDateTimeза значеннями року |
||||
Year,Word Month, WordDay, |
Year, місяця Month, дня Day, години Hour, |
||||
Word Hour, Word Minute, Word |
|||||
хвилини Minute, секунди Secта мілісекунди |
|||||
Sec, Word MSec, TDateTime &dt); |
|||||
MSec. Повертає false у випадку помилки |
|||||
bool TryEncodeDateWeek |
Формує dtтипу TDateTimeза заданими |
||||
(Word Year, Word WeekOfYear, |
значеннями року Year, тижня року WeekOfYear |
||||
TDateTime &dt, Word |
і дня тижня DayOfWeek. |
|
|
||
DayOfWeek); |
|
|
|||
Повертає false у випадку помилки |
|
|
|||
|
|
|
|
||
bool |
Формує dtтипу TDateTimeза заданими |
||||
TryEncodeDayOfWeekInMonth |
значеннями року Year, місяця Month, тижня |
||||
(Word Year, Word Month, Word |
|||||
NthDayOfWeek і дня тижня DayOfWeek. |
|||||
NthDayOfWeek, Word |
Повертає false у випадку помилки |
|
|
||
DayOfWeek, TDateTime &dt); |
|
|
|||
Word WeekOf |
Повертає номер тижня року заданої дати dt |
||||
(TDateTime dt) |
(значення від 1 до 53) |
|
|
||
Word WeekOfTheMonth |
Повертає номер тижня місяця заданої дати dt |
||||
(TDateTime dt); |
(значення від 1 до 6) |
|
|
||
Word WeekOfTheYear |
Повертає номер тижня року заданої дати dt |
||||
(TDateTime dt) |
(від 1 до 53). Функція є подібною до функції |
||||
|
|
WeekOf() |
|
|
|
int WeeksBetween(TDateTime |
Повертає кількість тижнів поміж Now і Then |
||||
Now, TDateTime Then); |
|
|
|
||
Word WeeksInAYear(Word Year); |
Повертає кількість тижнів року Year |
||||
Word WeeksInYear |
Повертає кількість тижнів року |
|
|
||
(TDateTime dt); |
зазначеної дати dt |
|
|
||
double WeekSpan |
Повертає дійсне значення кількості тижнів |
||||
(TDateTime Now, TDateTime |
поміж датами Now і Athen |
|
|
||
Then); |
(з урахуванням частини тижня) |
|
|
||
|
|
|
|
||
Word YearOf(TDateTime dt) |
Повертає рік зазначеної дати dt |
|
|
||
|
|
(значення від 1 до 9999) |
|
|
|
int YearsBetween(TDateTime |
Повертає цілу кількість років поміж |
|
|
||
Now, TDateTime Athen) |
датами Now і Athen |
|
|
||
double YearSpan (TDateTime |
Повертає дійсне значення кількості років поміж |
||||
Now, TDateTime Athen) |
датами Now і Athen(з урахуванням частини року) |
||||
TDateTime Yesterday(); |
Повертає дату вчорашнього дня |
|
|

354 |
Розділ 10 |
Для того щоб у програмі були доступними наведені вище функції й методи, треба директивою #include долучити відповідні заголовні файли DateUtils.hpp чи SysUtils.hpp. Розглянемо на прикладах роботу цих функцій і методів.
Використовуючи різні функції, наведемо кілька варіантів виведення поточної дати і часу. Нечислові результати виконання цих функцій виводяться мовою, яку визначено в налаштуваннях операційної системи. У наведеному нижче прикладі подано різні можливості форматування дати і часу, в тому числі можливі символи-розділювачі для дати і часу.
#include "DateUtils.hpp"
void __fastcall TForm1::BitBtn1Click(TObject *Sender) { TDateTime fd;
fd=Time(); Edit1->Text=fd.CurrentTime(); Edit2->Text=fd.TimeString(); fd=Date(); Edit3->Text=fd.DateString(); Edit4->Text=DateToStr(fd); Edit5->Text=DateTimeToStr(Now()); // Можливий розділювач годин і хвилин '–'
DateSeparator = '-'; ShortDateFormat="dd/mmmm/yyyy"; Label4->Caption=DateToStr(Date());
Label5->Caption="Сьогодні: "+FormatDateTime("dddd,dd,mmmm,yyyy ' \n час: 'hh:mm am/pm", Now());
}
void __fastcall TForm1::Timer1Timer(TObject *Sender) { Form1->Caption=Now();
}
Тут виведення поточної системної дати і часу у якості надпису форми здійснюється за допомогою компонента Timer1 (див. стор. 40).
Проілюструємо роботу функцій DecodeDate() та DecodeTime() для виведення поточної дати і часу.
void __fastcall TForm1::Button1Click(TObject *Sender)
{Word Year, Month, Day, Hour, Min, Sec, MSec; TDateTime dt = Now();
DecodeDate(dt, Year, Month, Day); Label1->Caption = AnsiString("Сьогодні ")+
IntToStr(Day) + AnsiString("-й день ")+ IntToStr(Month) + "-го місяця "+ IntToStr(Year) + " року ";
DecodeTime(dt, Hour, Min, Sec, MSec); Label2->Caption = IntToStr(Hour) +
" годин " + IntToStr(Min) + " хвилин";
}

Типи опрацювання дати і часу |
355 |
Наведемо приклади використання operator:
void __fastcall TForm1::Button1Click(TObject *Sender)
{TDateTime d1,d2,d3,d4; d1=Now(); Edit1->Text=d1.DateTimeString(); d2=d1.operator+(0.125); Edit2->Text=d2.TimeString(); d3=StrToDateTime(Edit3->Text); int k1 = d1.operator int();
int k2 = d3.operator int(); Edit4->Text=IntToStr(k2-k1);
d4=d1.operator-(d3); Edit5->Text=d4.TimeString();
}
Проілюструємо роботу вищенаведених функцій на прикладі програми для визначення різниці в роках, місяцях, днях, годинах і хвилинах.
void __fastcall TForm1::Button1Click(TObject *Sender) { TDateTime d1,d2;
d1=StrToDateTime(Edit1->Text); d2=StrToDateTime(Edit2->Text); int y,m,d,h,min,s;
y=YearsBetween(d2,d1); Edit3->Text=IntToStr(y); m=MonthsBetween(d2,d1); Edit4->Text=IntToStr(m); d=DaysBetween(d2,d1); Edit5->Text=IntToStr(d); h=HoursBetween(d2,d1); Edit6->Text=IntToStr(h); min=MinutesBetween(d2,d1); Edit7->Text=IntToStr(min);
}
Наведемо приклад використання функцій для визначення кінцевого строку завершення дня, неділі, року для певної заданої дати.

356 |
Розділ 10 |
void __fastcall TForm1::Button1Click(TObject *Sender)
{TDateTime dt1,dt2,dt3,dt4;
dt1=Edit1->Text; |
// Введення заданої дати |
dt2=EndOfTheDay(dt1); |
Edit2->Text=dt2; |
dt3=EndOfTheWeek(dt1); |
Edit3->Text=dt3; |
dt4=EndOfTheYear(dt1); |
Edit4->Text=dt4; |
}
Наведемо ще одну програму для ілюстрації роботи функцій змінювання дати і часу на задану величину.
void __fastcall TForm1::Button1Click(TObject *Sender)
{TDateTime dt=StrToDateTime(Edit1->Text); int x=StrToInt(Edit2->Text); switch(RadioGroup1->ItemIndex)
{ case 0: |
dt=IncYear(dt,x); |
break; |
case 1: |
dt=IncMonth(dt,x); |
break; |
case 2: |
dt=IncWeek(dt,x); |
break; |
case 3: |
dt=IncDay(dt,x); |
break; |
case 4: |
dt=IncHour(dt,x); |
break; |
case 5: |
dt=IncMinute(dt,x); break; |
|
case 6: |
dt=IncSecond(dt,x); break; |
}
Edit3->Text=DateTimeToStr(dt);
}
Наступний приклад програми продемонструє роботу відразу декількох функцій опрацювання даних TDateTime.

Типи опрацювання дати і часу |
357 |
#include <DateUtils.hpp> struct avio
{int nomr;
char reis[20], all[10]; TDateTime start,last; double dli;
AnsiString info()
{ AnsiString s=IntToStr(nomr)+" "+(AnsiString)reis+" "+
|
start.TimeString()+" "+last.TimeString()+" "+ |
|
(AnsiString)all; |
return s; |
|
} |
|
}; |
|
avio w[10]; |
|
int n=0; |
// Кількість маршрутів |
//------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{SG1->Cells[0][0]="Ном.рейс"; SG1->Cells[1][0]="Напрям"; SG1->Cells[2][0]="Відправ."; SG1->Cells[3][0]="Прибуття"; SG1->Cells[4][0]="Тривалість подорожі";
}
//------------------------------------------------------------
// Записати відомості
void __fastcall TForm1::Button1Click(TObject *Sender)
{SG1->RowCount=n+2; AnsiString s1,s2;
358 |
Розділ 10 |
|
|
|
w[n].nomr=StrToInt(Edit1->Text); |
|
// Увести номер маршруту, |
|
strcpy(w[n].reis,Edit2->Text.c_str()); |
// його назву, |
|
|
w[n].start=Edit3->Text; |
|
// час відправлення |
|
strcpy(w[n].all,Edit4->Text.c_str()); |
// та тривалість подорожі |
|
|
s1=(AnsiString)w[n].all; |
|
// Визначити окремо |
|
int n1=StrToInt(s1.SubString(1,s1.Pos(":")-1));//кількість годин |
||
|
s1.Delete(1,s1.Pos(":")); |
|
// та кількість |
|
int n2=StrToInt(s1); |
|
// хвилин подорожі |
|
w[n].last=IncHour(w[n].start,n1); |
|
// Визначити дати і часу |
|
w[n].last=IncMinute(w[n].last,n2); |
// прибуття |
|
|
// Тривалість подорожі у десят.долях годин |
|
|
|
double f=HourSpan(w[n].last,w[n].start); |
||
|
Edit5->Text=FloatToStr(f); |
|
|
|
double ff=DaySpan(w[n].last,w[n].start);// Кількість діб подорожі |
||
|
Edit6->Text=FloatToStr(ff); |
|
|
|
int d=DaysBetween(w[n].last,w[n].start);// Кількість цілих діб |
||
|
Edit7->Text=IntToStr(d); |
|
|
|
w[n].dli=ff; |
// Тривалість подорожі у днях |
|
|
Edit8->Text=TimeToStr(ff); |
// Вивести складову годин подорожі |
if (w[n].last.operator double()>1) w[n].last=w[n].last-(int(w[n].last));
SG1->Rows[n+1]->DelimitedText=w[n].info(); n++;
}
//------------------------------------------------------------
//Вибрати рейси за певним напрямом з часом прибуття до пункту призначення
//від 5:00 до 12:00
void __fastcall TForm1::Button2Click(TObject *Sender)
{int nom=0; Memo1->Clear();
if (Edit9->Text=="") {ShowMessage("Забули ввести!"); return;}
AnsiString nazva=Edit9->Text; // Ввести назву маршруту for (int i=0;i<n;i++)
if ( AnsiString(w[i].reis)==nazva && TTime(w[i].last)>=TTime("05:00") && TTime(w[i].last)<=TTime("12:00"))
{ nom=i; Memo1->Lines->Add(w[nom].info()); } if (!nom) ShowMessage("Немає таких рейсів");
}
//------------------------------------------------------------
//Визначити дату і час прибуття до пункту призначення для певного маршруту
//і конкретної дати відправлення
void __fastcall TForm1::Button3Click(TObject *Sender) { int m=0; TDateTime dt1, dt2;
if (Edit10->Text=="" || Edit11->Text=="") { ShowMessage("Забули ввести!"); return;}
int k = StrToInt(Edit10->Text); // Ввести номер маршруту for (int i=0;i<n;i++)
if (w[i].nomr==k) {m=i; break;} // Пошук потрібного маршруту