![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа со временем [D6, Win95/98]
phantom2040 © (2002-12-10 08:59:00)Привет Мастера!!!
Возник вопрос по работе со временем, пишу прогу в которой нужно вычислыть промежутки времени, ну а потом тарифицировать и т.д.
Значит я это все дело прокрутил следующим образом.
Декодирую данные со временем из полей ввода. После этого перевожу в это все дело в минуты путем умножения часов на 60 и прибавления минут, в результате получаю минуты в сутках, после этого из большего вычитаю меньшее получаю отработанные минуты.
После этого полученный результат делю на 60 и отбрасываю дробную часть получаю отработанные часы.
Далее отработанные минуты снова делю на 60 отбрасываю целую часть округляю до 2 знаков, после этого умножаю полученное на 0,6 (или делю на 60) и снова округляю до 2 знаков получаю отработанные минуты в часах.
Есть ли более оптимальный вариант работы со временем, нежли описанный мною????
han_malign (2002-12-10 11:41:00) [1]Anatoly Podgoretsky © (10.12.02 10:20)
SysUtils - это + ~300 Кб(во всяком случае до D7(в D7 utils-ы пограмотней разбили)), для модулей без VCL - жаба душит.
З.Ы. К тому же товарищЪ на 0.6 умножает и округляет, и вообще фигней мается, а целочисленная арифметика все-таки довольно полезная вещь.
oomneeq (2002-12-10 11:23:00) [2]>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)]);
Anatoly Podgoretsky (2002-12-10 10:20:00) [3]han_malign © (10.12.02 10:10)
Зачем ты делаешь эту лишнюю работу, посмотри на DecodeXXX
han_malign (2002-12-10 10:10:00) [4]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 09:57:00) [5]Не, а это как :-)
wal (2002-12-10 09:56:00) [6]Вычитаеш один отчет времени из другого (TDateTime) получаешь результат TDateTime, он же Double - интервал в сутках, а сутки в секунды или минуты перевести, думаю, сможешь
Chubais (2002-12-10 09:45:00) [7]умножаю полученное на 0,6 (или делю на 60)
гыы...
han_malign (2002-12-10 09:41:00) [8]> после этого умножаю полученное на 0,6 (или делю на 60)
0,6 = 6/10 <> 1/60 ?????
EncodeDate,EncodeTime,DateTimeToSystemTyme,DateTimeToTimeStamp, et cetera
sask (2002-12-10 09:11:00) [9]1.
var t, t1, t2: TDateTime;
t := t2 - t1;
2. См.HoursBetween, DaysBetween, MinutesBetween, SecondsBetweenи т.п.
VaS (2002-12-10 09:11:00) [10]var
dt1, dt2: TDateTime;
...
"Врямя работы (чч:мм) = "+FormatDateTime("hh:nn", dt2-dt1);