Главная страница
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
1-61537
Lizerginnn
2002-12-09 14:53
2002.12.19
Работа с


3-61485
Larisa
2002-12-02 13:24
2002.12.19
Создаю отчет в MS Word


3-61446
alxx
2002-11-29 15:55
2002.12.19
Как узнать существует ли временная таблица (в MSSQLServer)?


3-61441
Arkady
2002-11-27 13:08
2002.12.19
Соединение с InterBase


7-61845
asdqwer
2002-09-12 07:23
2002.12.19
Инфразвук