Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Еще один вопрос о времени...


angelcom ©   (2002-08-08 19:53:00) 

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


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

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


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

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)

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


elv   (2002-08-12 17:38:00) [3]

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


pasha676   (2002-08-12 16:08:00) [4]

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

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

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


Anatoly Podgoretsky   (2002-08-12 10:23:00) [5]

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


elv   (2002-08-12 10:17:00) [6]

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;


Johnmen   (2002-08-12 09:32:00) [7]

>elv © (10.08.02 13:56)

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


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

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


elv   (2002-08-10 13:56:00) [9]

Ну ты и извращенец ;)
{---------------------------------------------------------}
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-10 05:59:00) [10]

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

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;


Anatoly Podgoretsky   (2002-08-08 20:56:00) [11]

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


elv   (2002-08-08 20:41:00) [12]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо