Главная страница
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.014 c
3-61451
Victor_Cr
2002-11-29 14:07
2002.12.19
Права юзерей, на уровне полей таблиц.


4-61860
Dimedrol
2002-11-05 17:22
2002.12.19
Keyboard Hook


3-61502
Геннадий
2002-12-02 16:30
2002.12.19
Какой логин/пароль для InterBase по умолчанию?


1-61653
#Deus
2002-12-07 16:38
2002.12.19
OpenDialog


3-61449
basile
2002-11-30 15:56
2002.12.19
Aggragete