Текущий архив: 2002.12.19;
Скачать: CL | DM;
Вниз
Работа со временем Найти похожие ветки
← →
phantom2040 © (2002-12-10 08:59) [0]Привет Мастера!!!
Возник вопрос по работе со временем, пишу прогу в которой нужно вычислыть промежутки времени, ну а потом тарифицировать и т.д.
Значит я это все дело прокрутил следующим образом.
Декодирую данные со временем из полей ввода. После этого перевожу в это все дело в минуты путем умножения часов на 60 и прибавления минут, в результате получаю минуты в сутках, после этого из большего вычитаю меньшее получаю отработанные минуты.
После этого полученный результат делю на 60 и отбрасываю дробную часть получаю отработанные часы.
Далее отработанные минуты снова делю на 60 отбрасываю целую часть округляю до 2 знаков, после этого умножаю полученное на 0,6 (или делю на 60) и снова округляю до 2 знаков получаю отработанные минуты в часах.
Есть ли более оптимальный вариант работы со временем, нежли описанный мною????
← →
sask © (2002-12-10 09:11) [1]1.
var t, t1, t2: TDateTime;
t := t2 - t1;
2. См.HoursBetween, DaysBetween, MinutesBetween, SecondsBetween
и т.п.
← →
VaS © (2002-12-10 09:11) [2]var
dt1, dt2: TDateTime;
...
"Врямя работы (чч:мм) = "+FormatDateTime("hh:nn", dt2-dt1);
← →
han_malign © (2002-12-10 09:41) [3]> после этого умножаю полученное на 0,6 (или делю на 60)
0,6 = 6/10 <> 1/60 ?????
EncodeDate,EncodeTime,DateTimeToSystemTyme,DateTimeToTimeStamp, et cetera
← →
Chubais © (2002-12-10 09:45) [4]умножаю полученное на 0,6 (или делю на 60)
гыы...
← →
wal © (2002-12-10 09:56) [5]Вычитаеш один отчет времени из другого (TDateTime) получаешь результат TDateTime, он же Double - интервал в сутках, а сутки в секунды или минуты перевести, думаю, сможешь
← →
Anatoly Podgoretsky © (2002-12-10 09:57) [6]Не, а это как :-)
← →
han_malign © (2002-12-10 10:10) [7]dt:=dt2-dt1;
wSeconds:=round(dt*24*60*60);
wMinutes:=wSeconds div 60;
wSeconds:=wSeconds mod 60;
wHours:=wMinutes div 60;
wMinutes:=wMinutes mod 60;
wDays:=wHours div 24;
wHours:=wHours mod 24;
- корректно только для дельты, для вычисления абсолютной даты - всякие заморчки с длинами месяца, високосными годами - но это, IMHO, SysUtils. Все приведенное в предыдущих постах.
← →
Anatoly Podgoretsky © (2002-12-10 10:20) [8]han_malign © (10.12.02 10:10)
Зачем ты делаешь эту лишнюю работу, посмотри на DecodeXXX
← →
oomneeq © (2002-12-10 11:23) [9]>VaS © (10.12.02 09:11)
>var
> dt1, dt2: TDateTime;
>...
>"Врямя работы (чч:мм) = "+FormatDateTime("hh:nn", dt2-dt1);
хорошо для случая, когда длительность заведомо не более 24 часов
а если больше, надо койчто добавить,
чтото вроде того:
Format("Потрачено времени: %d days %s",[Trunc(dt2-dt1),FormatDateTime("hh:nn", dt2-dt1)]);
← →
han_malign © (2002-12-10 11:41) [10]Anatoly Podgoretsky © (10.12.02 10:20)
SysUtils - это + ~300 Кб(во всяком случае до D7(в D7 utils-ы пограмотней разбили)), для модулей без VCL - жаба душит.
З.Ы. К тому же товарищЪ на 0.6 умножает и округляет, и вообще фигней мается, а целочисленная арифметика все-таки довольно полезная вещь.
Страницы: 1 вся ветка
Текущий архив: 2002.12.19;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.012 c