| imho.ws |
![]() |
|
|
|
# 1 |
|
Newbie
Регистрация: 12.01.2004
Сообщения: 31
![]() |
Сравнение времени в Delphi
Поставлена такая задача: в программе задается временной промежуток От: (ЧЧ:ММ)
До: (ЧЧ:ММ) Программа должна в данном промежутке времени каждую секунду выполнять некое действие. Как реализовать корректное сравнение времени, учитывая все комбинации временных промежутков? Например для: от 13:15 до 17:10 от 15:00 до 00:00 от 15:15 до 14:20 от 13:10 до 13:15 ?? Помогите пожалуйста, замучался уже с if..then
|
|
|
|
|
# 2 |
|
Member
Регистрация: 01.01.2004
Адрес: Воронеж, Россия
Сообщения: 206
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
GetTickCount в начале промежутка и в конце. А размер Tick'а узнать - GetSystemTimeAdjustment. За подробдностями - msdn.microsoft.com
__________________
<SPEEDing|VoNK> you cant use knoppix as a server can you? <bob> why not? people use windows as one. |
|
|
|
|
# 3 |
|
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
mrac
А почему бы не воспользоваться дмумя таймерами: 1 - каждую секунду проверяет текущее время на принадлежность указанному промежутку и включает/выключает в зависимости от этого второй таймер. 2 - каждую секунду выполняет нужное действие. В принципе, можно проверку в первом таймере делать и не каждую секунду, а вычислять ее в зависимости, опять-таки, от разницы между текущим временем и началом данного промежутка. А текущее время определить просто: Код:
var DateTime: TDateTime; str: string; hour, min, sec: integer; ... DateTime := Time; str := TimeToStr(DateTime); hour := StrToInt(copy(str, 1, 2)); min := StrToInt(copy(str, 4, 2)); sec := StrToInt(copy(str, 7, 2)); ...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
|
|
|
|
# 4 |
|
Newbie
Регистрация: 12.01.2004
Сообщения: 31
![]() |
Да нет, вы не поняли.. Я как раз так и делаю, как Ghost написал
Я хочу разобраться, как правильно, учитывая все ньюансы сравнить текущее время - попадает оно в данный промежуток или нет? Как я написал примеры в первом посте - учитывать надо довольно много вариантов.И еще: можно было бы конечно просто сравнивать время с заданным и потом, когда они станут равны включить второй таймер, но это не годится, т.к. если программа будет запущена, когда этот интервал уже идет, она соответственно не сработает. |
|
|
|
|
# 5 | |
|
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
mrac
Цитата:
Код:
type
strTime = string[5];
function InTimeSet(tStart, tFinal, tVerify: strTime): boolean;
var
iStart, iFinal, iVerify: integer;
begin
iStart := 60 * (StrToInt(copy(tStart, 1, 2))) + StrToInt(copy(tStart, 4, 2));
iFinal := 60 * (StrToInt(copy(tFinal, 1, 2))) + StrToInt(copy(tFinal, 4, 2));
iVerify := 60 * (StrToInt(copy(tVerify, 1, 2))) + StrToInt(copy(tVerify, 4, 2));
if iStart <= iFinal then
InTimeSet := (iStart <= iVerify) and (iVerify <= iFinal)
else
InTimeSet := (iStart <= iVerify) or (iVerify <= iFinal);
end;
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
|
|
|
|
|
# 7 | |
|
Junior Member
Регистрация: 25.09.2003
Сообщения: 53
![]() |
Цитата:
DateTime : TDateTime; hour, min, sec, sec100 : Word; ... DecodeTime(Time,hour,min,sec,sec100); Ничего общего не замечаешь? |
|
|
|