Форум: "Базы";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
ВнизЕще один вопрос о времени... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.015 c