Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
14-61791
AL2002
2002-11-28 15:29
2002.12.19
Люди, у меня уже крыша едет...


1-61609
Diouzshev
2002-12-10 11:55
2002.12.19
Передаю nil в кач. параметра процедуры, а в процедуре не nil


1-61512
Демонов Е.В.
2002-12-06 17:00
2002.12.19
Вопрос о размере адресного пространства


1-61601
olden
2002-12-06 18:56
2002.12.19
как избежать прокрутки комбобокса колесом мышки


3-61499
Alex2
2002-12-02 15:43
2002.12.19
как принудительно закрыть таблицу