![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается вычислить оставшееся время
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