imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 05.01.2005, 04:28     # 1
mrac
Newbie
 
Аватар для mrac
 
Регистрация: 12.01.2004
Сообщения: 31

mrac Путь к славе только начался
Сравнение времени в Delphi

Поставлена такая задача: в программе задается временной промежуток От: (ЧЧ:ММ)
До: (ЧЧ:ММ)
Программа должна в данном промежутке времени каждую секунду выполнять некое действие. Как реализовать корректное сравнение времени, учитывая все комбинации временных промежутков?
Например для:
от 13:15 до 17:10
от 15:00 до 00:00
от 15:15 до 14:20
от 13:10 до 13:15
??
Помогите пожалуйста, замучался уже с if..then
mrac вне форума  
Старый 05.01.2005, 11:11     # 2
chesnok
Member
 
Аватар для chesnok
 
Регистрация: 01.01.2004
Адрес: Воронеж, Россия
Сообщения: 206

chesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форуме
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.
chesnok вне форума  
Старый 05.01.2005, 11:50     # 3
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
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));
...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 05.01.2005, 12:07     # 4
mrac
Newbie
 
Аватар для mrac
 
Регистрация: 12.01.2004
Сообщения: 31

mrac Путь к славе только начался
Да нет, вы не поняли.. Я как раз так и делаю, как Ghost написал Я хочу разобраться, как правильно, учитывая все ньюансы сравнить текущее время - попадает оно в данный промежуток или нет? Как я написал примеры в первом посте - учитывать надо довольно много вариантов.

И еще: можно было бы конечно просто сравнивать время с заданным и потом, когда они станут равны включить второй таймер, но это не годится, т.к. если программа будет запущена, когда этот интервал уже идет, она соответственно не сработает.
mrac вне форума  
Старый 05.01.2005, 17:52     # 5
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
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;
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 05.01.2005, 17:58     # 6
mrac
Newbie
 
Аватар для mrac
 
Регистрация: 12.01.2004
Сообщения: 31

mrac Путь к славе только начался
Да, ночью что-то совсем тупил... утром сел, подумал и написал программку....правда еще только на листке бумаги, проверить не могу
mrac вне форума  
Старый 19.01.2005, 15:08     # 7
sflash
Junior Member
 
Аватар для sflash
 
Регистрация: 25.09.2003
Сообщения: 53

sflash Косячил раньше, старается исправиться
Exclamation

Цитата:
Сообщение от Ghost
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));
...
Да-а-а, а потом говорят что программы на Delphi тормозят. Ну кто же так пишет. А вот так не пробовал?
DateTime : TDateTime;
hour, min, sec, sec100 : Word;
...
DecodeTime(Time,hour,min,sec,sec100);

Ничего общего не замечаешь?
sflash вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:07.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.