Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.02;
Скачать: CL | DM;

Вниз

Еще один вопрос о времени...   Найти похожие ветки 

 
angelcom   (2002-08-08 19:53) [0]

Если расчитывать разницу между двумя датами и временем:
напр: 23.05.02 08:00 и 29.05.02 12:00 то результат выдает 147:59
мне такой результат не подходит, необходимо 148:00 и т.д. если пробывать разные интервалы времени, выпадает 29 мин и т.д.
Как избавится от этой оплошности???


 
elv ©   (2002-08-08 20:41) [1]

StrToDateTime("29.05.02 12:00")-StrToDateTime("23.05.02 08:00")=6.1666666667
Не понятно что ты хочешь. Также непонятно что тебе нужно на самом деле. :)


 
Anatoly Podgoretsky ©   (2002-08-08 20:56) [2]

Ты не пишешь, как производишь вычисления, но это обычная проблема относительности представлений чисел с плавующией запятой.
У тебя 6 дней и 8 часов, 8 часов это 1/6, дальше тебе наверно все понятно, в своих вычислениях примени округление


 
angelcom   (2002-08-10 05:59) [3]

Я делаю следующее:

var
ddiff:TDateTime;
begin
...
ddiff:=StrToDateTime(DateToStr(DateTimePicker2.Date)+" "+MaskEdit2.Text)-StrToDateTime(DateToStr(DateTimePicker1.Date)+" "+MaskEdit1.Text);
Lab_All_Time.Caption := IntToStr(trunc(ddiff*24)) + ":" + IntToStr(trunc(frac(ddiff*24)*60));
...
end;


 
elv ©   (2002-08-10 13:56) [4]

Ну ты и извращенец ;)
{---------------------------------------------------------}
Function MyRound( X: Double; Precision : Integer ): Double;
var
ScaledFractPart, Temp : Double;
begin
ScaledFractPart := Frac(X)*Precision;
Temp := Frac(ScaledFractPart);
ScaledFractPart := Int(ScaledFractPart);
if Temp >= 0.5 then ScaledFractPart := ScaledFractPart + 1;
if Temp <= -0.5 then ScaledFractPart := ScaledFractPart - 1;
MyRound := Int(X) + ScaledFractPart/Precision;
end; //MyRound
{---------------------------------------------------------}

procedure TForm1.Button1Click(Sender: TObject);
var
ddiff:TDateTime;
begin

ddiff:=StrToDateTime(DateToStr(DateTimePicker2.Date)+" "+MaskEdit2.Text)-StrToDateTime(DateToStr(DateTimePicker1.Date)+" "+MaskEdit1.Text);
ddiff:=MyRound(ddiff,10000);
Lab_All_Time.Caption := IntToStr(trunc(ddiff*24)) + ":" + IntToStr(trunc(frac(ddiff*24)*60));




 
angelcom   (2002-08-12 03:35) [5]

Вы супер мастера, огромное спасибо


 
Johnmen ©   (2002-08-12 09:32) [6]

>elv © (10.08.02 13:56)

Невполне корректная процедура округления...


 
elv ©   (2002-08-12 10:17) [7]

Johnmen
Ага. Кстати из какого то faq.

angelcom
function RoundUp( X: Extended; Y:Integer): Extended;
begin
x:=x*y;
X:= Trunc(X) + Trunc (Frac(X) * 2);
RoundUp:=X/y;
end;


 
Anatoly Podgoretsky ©   (2002-08-12 10:23) [8]

А почему бы не перевести время в минуты (24*60) с простым округлением и в дальнейшем пользовать обычным целочисленным делением и остатком по модулю 60


 
pasha676   (2002-08-12 16:08) [9]

Мужики а я не понял в чем проблемма то.
Вот у меня прога работающая, отрывок из нее:

EndTime:=NOw-BeginTime; - Тут все TDateTime
DecodeTime(EndTime,Hour, Min, Sec, MSec);

Все вроде нормально работает. Или когда дата появляется начинаються сбои?



 
elv ©   (2002-08-12 17:38) [10]

pasha676
Все вроде нормально работает.
Выполни авторский код.


 
lgreg   (2002-08-12 22:13) [11]

FromTime:=TimeStampToMSecs(DateTimeToTimeStamp(FStartTime));
ToTime:= TimeStampToMSecs(DateTimeToTimeStamp(FEndTime));
E:=ToTime-FromTime;

e := e / 1000;
Trunc(E); //-- секунды
e := e / 60;
Truncate(E); //--минуты и т.д.

FStartTime это:StrToDateTime(DateToStr(DateTimePicker2.Date)+" "+MaskEdit2.Text)

вкратце, так.
работает.


 
angelcom   (2002-08-13 03:40) [12]

В функции elv © есть маленькая недоработка, я ее устранил. теперь все ОК, спасибо всем кто откликнулся



Страницы: 1 вся ветка

Текущий архив: 2002.09.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
1-3420
Vlad2
2002-08-22 06:53
2002.09.02
Использование типа record


1-3333
new23
2002-08-21 16:00
2002.09.02
Создание таймера


3-3264
glory_bug
2002-08-09 21:32
2002.09.02
Работа с базой без


1-3492
AFROLOV
2002-08-21 11:40
2002.09.02
Как во время вып. прог. устан. обработчик на соб. и его снять


6-3542
GM_
2002-06-21 23:15
2002.09.02
Как получить маску подсети ?