Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 12:02   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Как между двумя датами определить время бодрствования?

Пытаюсь решить, исходные данные такие:
1-я дата/время 10.09.2010 03:15:00
2-я дата/время 15.09.2010 14:15:00

Человек просыпается в 07.30.00, ложиться спать в 23.30.00

Необходимо определить время бодрствования в минутах между первой и второй датой.

Может кто сталкивался?
Dux вне форума Ответить с цитированием
Старый 15.09.2010, 12:23   #2
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

есть системный юнит называется DateUtils. Там все подобные функции есть.
Делаешь цикл от и до , и оперируешь нужными функциями.
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 15.09.2010, 12:28   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
есть системный юнит называется DateUtils. Там все подобные функции есть.
Делаешь цикл от и до , и оперируешь нужными функциями.
По поводу DateUtils в курсе. Как определить время между датами тоже разобрался, но решить задачу пока не выходит...
Dux вне форума Ответить с цитированием
Старый 15.09.2010, 12:31   #4
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Что именно не выходит?
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 15.09.2010, 12:37   #5
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
Что именно не выходит?
Пока сама концепция подсчета. 1-я и 2-я дата/время в программе могут изменяться, также как и время подъема и сна. Понятно, что из общего количества минут необходимо вычесть время сна, тогда получим общее время бодрствования. Но пока алгоритм подсчета не ясен.
Dux вне форума Ответить с цитированием
Старый 15.09.2010, 14:17   #6
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

эх, блин, алгоритм же ты написал... ладно, вот код, мог ошибиться, делал на лету
думаю последнее условие, когда даты внутри бодряка сам сможешь написать
Код:
var
    d1, d2: TDateTime;
    t1, t2: TTime;
begin
  t1 := StrToTime('07:30:00');
  t2 := StrToTime('23:30:00');
  d1 := StrToDateTime('10.09.2010 03:15:00');
  d2 := StrToDateTime('15.09.2010 14:15:00');
//когда время бодровствования входит во время начала и конца
  if ((DateOf(d1)+t1)>d1)and((DateOf(d2)+t2)<d2) then
    ShowMessage(IntToStr(DaysBetween(d2,d1)*MinutesBetween(t2,t1)))
  else
//когда входит только в начало
    if (DateOf(d1)+t1)>d1 then
      ShowMessage(IntToStr((DaysBetween(d2,d1)-1)*MinutesBetween(t2,t1) + MinutesBetween(d2,DateOf(d2)+t1)))
  else
//когда входит только в конец
    if (DateOf(d2)+t2)<d2 then
      ShowMessage(IntToStr((DaysBetween(d2,d1)-1)*MinutesBetween(t2,t1) + MinutesBetween(d1,DateOf(d1)+t2)));
end;
©Учиться, учиться и еще раз учиться!

Последний раз редактировалось quit; 15.09.2010 в 14:23.
quit вне форума Ответить с цитированием
Старый 15.09.2010, 15:32   #7
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Спасибо большое, буду проверять
Dux вне форума Ответить с цитированием
Старый 15.09.2010, 15:56   #8
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Quit, 2 вопроса

1. Почему ShowMessage(IntToStr((DaysBetween(d 2,d1)-1) - вычитается единица?
2. Последнее условие - это когда 1-я и 2-я дата находится в промежутке одних суток (времени бодрствования)?
Dux вне форума Ответить с цитированием
Старый 15.09.2010, 15:58   #9
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

У меня вот так работает
Код:
var
  r, n, s: Real;
  DateStart, DateEnd: TDateTime;
  Date1, Date2: TDate;
  Time1, Time2: TTime;
  TimeW, TimeS: TTime;
  T1: TTime;//остаток в начале
  T2: TTime;//остаток в конце
  Tost: TTime;//общий остаток
  Hour, Min, Sec, MSec: WORD;
begin
  t1 := 0;
  T2 := 0;
  Date1 := StrToDate('10.09.2010');
  Time1 := StrToTime('01:30:00');
  Date2 := StrToDate('15.09.2010');
  Time2 := StrToTime('12:00:00');
  TimeW := StrToTime('07:30:00');
  TimeS := StrToTime('23:00:00');
  if (TimeW <= Time1) and (Time1 < TimeS) then
  begin
    t1 := TimeS - Time1;
    Time1 := TimeS;
  end else
  begin
    Date1 := Date1 - 1;
    Time1 := TimeS;
  end;
  if (TimeW <= Time2) and (Time2 < TimeS) then
  begin
    t2 := Time2 - Timew;
    Date2 := Date2 - 1;
    Time2 := TimeS;
  end else
  begin
    Date2 := Date2 - 1;
    Time2 := TimeS;
  end;
  DateStart := Date1+Time1;
  DateEnd := Date2+Time2;
  Tost := t1 + t2;
  DecodeTime(Tost, hour, min, sec, msec);
  r := MinutesBetween(DateStart, DateEnd);
  n := MinutesBetween(TimeW, TimeS);
  S := (Trunc(r/n))*n;
  ShowMessage(floatToStr(s+60*hour+min));
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 15.09.2010, 16:00   #10
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Sanprof. Спасибо за ваш труд, вечером буду разбираться
Dux вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
время между двумя интервалами tbeca@mail.ru Общие вопросы Delphi 2 29.01.2010 23:11
Как установить связь между двумя файлами ЦЕРЦЕЯ Microsoft Office Excel 2 25.01.2010 11:59
Разница между двумя датами (целые дни) Droid Общие вопросы Delphi 15 03.11.2009 23:36
выборка между двумя датами UnChanter БД в Delphi 1 30.03.2009 21:09
Как задать интервал между датами в фильтре Леон Microsoft Office Access 2 22.10.2008 11:16