Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Сложение времени   Найти похожие ветки 

 
cad2206   (2004-10-04 11:56) [0]

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


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

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


 
Rutven ©   (2004-10-04 12:01) [2]

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


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

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


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


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

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


 
Vitaly ©   (2004-10-05 13:54) [5]


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

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


 
Koala ©   (2004-10-05 14:13) [6]

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


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

Посмотри TTimeStamp


 
Skyle ©   (2004-10-05 15:15) [8]

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

?


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

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

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


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

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


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

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


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

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

таблица:
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. Как мне из него получить общее ВРЕМЯ нахождения на территории???

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


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

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 получить время
у тебя уже в этом числе содержится время.
Как ты это число интерпритируешь - это твоё личное дело, будь то строка, число минут али количество циклов полураспада плутония...


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

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) [15]

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

Это?


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.044 c
1-1096479986
xman
2004-09-29 21:46
2004.10.17
TreeView


3-1095398667
cad2206
2004-09-17 09:24
2004.10.17
Данные из двух таблиц в одном DBGrid???


3-1095609402
map4ello
2004-09-19 19:56
2004.10.17
Access таблица и RecNo


14-1096128458
Ricks
2004-09-25 20:07
2004.10.17
Помогите с физикой!!!


3-1095696686
Sigetta
2004-09-20 20:11
2004.10.17
Восстановление индекса