Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не получается вычислить оставшееся время


ABS ©   (2006-09-27 23:08:00) 

Здравствуйте Мастера.
Никак у меня не получается вычислить оставшееся время.
Напр.: Есть некое значение времени - EndTime:='22:00:00';
Мне нужно в Label показать оставшееся время с NOW до EndTime, в формате HH:MM:SS. Что-то вроде таймера обратного отсчета.

Помогите пожалуйста.


Германн   (2006-09-29 02:57:00) [1]


> guav ©   (29.09.06 01:50) [14]
>
> проще всего прибавить 1 (одни сутки)

Согласен. Проще. Но не !"нагляднее", Имхо.


guav   (2006-09-29 02:48:00) [2]

> [15] Германн ©   (29.09.06 01:59)


> У автора фигурирует Time! А в нём нет и не может быть суток.

Ну нет, так добавим. Много точности ИМХО не потеряем, т.к. 22:00 это почти сутки.


Германн   (2006-09-29 01:59:00) [3]


> guav ©   (29.09.06 01:50) [14]
>
> проще всего прибавить 1 (одни сутки),

У автора фигурирует Time! А в нём нет и не может быть суток.


guav   (2006-09-29 01:50:00) [4]

проще всего прибавить 1 (одни сутки), а потом после вычитания взять дробную часть (возможно, брать дробную часть не обязательно)FormatDateTime('hh:mm:ss',Frac(StrToTime(EndTimeUS)-(Time) + 1)));


Германн   (2006-09-29 01:42:00) [5]


> Введя эту проверку, соответственно нужно делать какие-то
> доп. вычисления времени. Какие???

Если смена ночная, то при расчёте "оставшегося до окончания смены" времени следует учитывать, как я уже говорил "переход через 00:00:00". Т.е. ты должен в этом случае сначала произвести проверку Anatoly Podgoretsky ©   (28.09.06 21:27) [11]. И если она даст Тру, то подсчитать время, оставшееся до полуночи, а после прибавить время "от полуночи до EndTimeUS.


ABS   (2006-09-29 01:19:00) [6]

> [11] Anatoly Podgoretsky ©   (28.09.06 21:27)
> Ввести проверку if Time >= EndTimeUS then


Извините пожалуйста, я что-то не догоняю.
Введя эту проверку, соответственно нужно делать какие-то доп. вычисления времени. Какие??? Ведь если оставить FormatDateTime('hh:mm:ss',StrToTime(EndTimeUS)-(Time));
получится тоже самое. Либо надо EndTimeUSприсвоить др. значение????


Anatoly Podgoretsky   (2006-09-28 21:27:00) [7]

Ввести проверку if Time >= EndTimeUS then


ABS   (2006-09-28 20:24:00) [8]

> [8] Германн ©   (28.09.06 19:54)

Не, все равно не помогло.


> [9] Anatoly Podgoretsky ©   (28.09.06 20:04)

А как тогда в данном случае поступить???


Anatoly Podgoretsky   (2006-09-28 20:04:00) [9]


> Единственный косяк: с 22:00 до 23:59.  В остальное время
> все работает.

Потому что там получается отричательное значение


Германн   (2006-09-28 19:54:00) [10]

if (StrToInt(FormatDateTime('hh',Time)) > 9) and (StrToInt(FormatDateTime('hh',Time)) < 22)  then


ABS   (2006-09-28 17:01:00) [11]

Чет не выходит.
if StrToInt(FormatDateTime('h',Time)) > 9   then
 begin
   EndTimeUS := '22:00:00';
   label1.Caption := 'Дневная смена';
 end;
if (StrToInt(FormatDateTime('hh',Time)) > 21) or (StrToInt(FormatDateTime('hh',Time)) < 10) then
 begin
   EndTimeUS := '10:00:00';
   Label1.Caption := 'Ночная смена';
 end;
lbEndTime.Caption :=FormatDateTime('hh:mm:ss',StrToTime(EndTimeUS)-(Time));


Единственный косяк: с 22:00 до 23:59.  В остальное время все работает.
:(


Asail   (2006-09-28 14:24:00) [12]

А ты так попробуй:
ifStrToTime('22:00:00') >=Time thenFormatDateTime...


ABS   (2006-09-28 12:51:00) [13]

> Только, если не нужно будет переходить через 00:00:00.


Через 00 прохожу нормально. Проблемы возникают после 22:00.
Т.Е. начиная с 22:00:00 и до 23:59:59 показывается не оставшееся время до 10:00:00, а таймер увеличивается, как только перескакиваю 00:00 все ОК.


Германн   (2006-09-28 01:16:00) [14]


> Спасибо большое.
> FormatDateTime('hh:mm:ss',StrToTime('22:00:00')-Time);
> Работает.
>

Только, если не нужно будет переходить через 00:00:00.


ABS   (2006-09-28 00:14:00) [15]

> [2] Eraser ©   (27.09.06 23:16)


Спасибо большое.
FormatDateTime('hh:mm:ss',StrToTime('22:00:00')-Time);
Работает.


Eraser   (2006-09-27 23:16:00) [16]

> [0] ABS   (27.09.06 23:08)

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(FormatDateTime('Осталось hh часов, nn минут, ss секунд.',
   StrToTime('23:30:00') - Time));
end;


Johnmen   (2006-09-27 23:13:00) [17]

StrToDate+F1, TDateTime+F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо