Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-3312
maxim2
2002-08-12 13:27
2002.09.02
Как в DBGrid е спрятать записи удовлетворяющие опр. условию


3-3294
Leran2002
2002-08-13 07:34
2002.09.02
TQuickRep


14-3610
^Sanya
2002-08-07 22:06
2002.09.02
Работа с версией проекта


8-3533
Сергей Чурсин
2002-04-15 16:50
2002.09.02
Несколько DirectDraw в одном приложении ?


1-3489
net
2002-08-21 12:19
2002.09.02
Фокус ввода





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский