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

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

Сложение времени [D7, Win2k]


cad2206 ©   (2004-10-04 11:56:00) 

Помогите решить такую проблему: есть время, хранящееся в переменной TDataTime. Как мне складывать его так, чтобы оно не отсекалось в дату, если сумма больше 24? Т.е. допустим: 17:20
+10:20=27:40.


cad2206   (2004-10-05 16:46:00) [1]

Всем спасибо, помогло.


palva   (2004-10-05 15:56:00) [2]

var
 t: TDateTime;
begin
 t := 0.5;   // 12 часов
 t := t + 0.333333; // 8 часов (примерно)
 t := t + 0.333333; // 8 часов
 t := t + 0.333333; // 8 часов
 t := t + 0.333333; // 8 часов
 // всего будет 44 часов
 WriteLn(Double(t)*24:4:1); // 44.0
end.


Vitaly   (2004-10-05 15:56:00) [3]

Time - разницы времени между выходом и входом за каждый день, а потом складываю их.

DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word)
Вывести в виде HHH:MM
s := Format('%d:%d', hour+(24*int(time)),min)
Время в минутах
min := min+(hour+(24*int(time)))*60

Это?


Алхимик   (2004-10-05 15:54:00) [4]

DecodeTime + [4]
Есть переменная MyTime : TDateTime.
далее что то в этом роде:

var Hour, Min, Sec, MSec : word;
    str : string;
...
DecodeTime(MyTime ,Hour, Min, Sec, MSec);
// раскладываем дату\время на часы, минуты, секунды и милисекунды
str := IntToStr(Trunc(MyTime)*24+Hour)+':'+IntToStr(Min);
// интерпритируем в строку вида 27:40 (аля [0])
...


> как мне из числа -0,47369706019 получить время
у тебя уже в этом числе содержится время.
Как ты это число интерпритируешь - это твоё личное дело, будь то строка, число минут али количество циклов полураспада плутония...


cad2206   (2004-10-05 15:45:00) [5]

Попробую объяснить задачу:

таблица:
05.11.2004 10:12.30 Вход
05.11.2004 20:45.14 Выход
06.11.2004 08:30.00 Вход
06.11.2004 19:30.20 Выход
07.11.2004 09:00.30 Вход
07.11.2004 21:15.34 Выход

Необходимо подсчитать время, проведенное на территории.

Я делаю так: считаю разницы времени между выходом и входом за каждый день, а потом складываю их. А получаю значение в формате TDateTime. Как мне из него получить общее ВРЕМЯ нахождения на территории???

Хотелось бы получить ответы, приближенные к коду. Сам уже ничего не понимаю. Зарание спасибо.


palva   (2004-10-05 15:39:00) [6]

А зачем хранить в минутах? Если будем использовать тип TDataTime, то будем хранить в днях, какая разница? Время перевалило за 24 и, вы пишете, дальше меняется дата - это в вашей интерпретации она меняется. А если интерпретировать TDateTime не как дату а как отрезок времени, то там никакой даты нет, есть количество дней. То есть берете переменную с типом TDataTime и умножаете ее на 24 получаете (Double) количество часов. Я не понимаю ваших трудностей.


antonn   (2004-10-05 15:31:00) [7]

считай часы и *60 - получишь минуты, + твои отсеченные минуты = 27часов 40минут.


cad2206   (2004-10-05 15:22:00) [8]

Алхимик: я это понимаю, но как мне из числа -0,47369706019 получить время. Преобразование его в строку помогает (DateTimeToStr), я получаю строку вида '30.12.1988 12:23'. Это время у меня постоянно копится, мне не нужна дата совсем, но как быть, когда время переваливает за 24 (дальше меняется дата)?

Koala: Что значит, хранить значение в минутах?


Skyle   (2004-10-05 15:15:00) [9]

TMyTime = record
 Hours : Integer;
 Minutes : Integer;
end;

?


mike-d   (2004-10-05 14:31:00) [10]

Посмотри TTimeStamp


Koala   (2004-10-05 14:13:00) [11]

cad2206   (04.10.04 11:56)
Храни значение в минутах, а затем преобразовуй по надобности в текстовый формат HHH:ММ, почему так?, сам бился над этим и пришел к выводу что так удобнее будет, и суммировать удобнее и если надо тариф умножить на время то тоже удобно, а вообще плясать надо от конкретной задачи


Vitaly   (2004-10-05 13:54:00) [12]


> Дни переводятся в часы умножением на коэффициент равный
> 24.

Не может быть!? :)


Алхимик   (2004-10-05 13:52:00) [13]


> дни должны быть переведены в часы

Дни переводятся в часы умножением на коэффициент равный 24.


cad2206   (2004-10-05 12:51:00) [14]

Ребяты, ну помогите, второй день бьюсь лбом об стену.Есть переменная TDateTime, её значение, к примеру, -0,47369706019. Как из неё получить все время (т.е. дни должны быть переведены в часы)?


Rutven   (2004-10-04 12:01:00) [15]

В TDateTime никак.
Используй другой тип.
А зачем собственно?


Smithson   (2004-10-04 11:59:00) [16]

время и дата - это число в формате double.
Целая часть - число дней, дробная, строго говоря, тоже число дней, но дробных, то есть час - это 1/24 = 0,041(6)
а как ты его будешь интерпретировать - твое дело.


Наверх

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