Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1096310610
lipskiy
2004-09-27 22:43
2004.10.17
Ё-маё! да что ж за фигня такая! ну подскажите же что неверно?


4-1095260152
Alexis
2004-09-15 18:55
2004.10.17
Проблема с ExitProcess( )


1-1097039937
qwe
2004-10-06 09:18
2004.10.17
Проблема с установкой EhLib 3.5 Components


9-1087359964
AndruhaO
2004-06-16 08:26
2004.10.17
Видеорежим


3-1095336155
zorik
2004-09-16 16:02
2004.10.17
Связаные базы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский