PDA

View Full Version : محاسبه زمان



Microsoft
یک شنبه 09 شهریور 1382, 13:32 عصر
با سلام خدمت همه دوستان عزیز

چطوری میشه مدت زمان بین 2 ساعت خاص رو محاسبه کرد ؟

مثلا 3 تا ادیت باکس داریم . به این شکل عمل میکنیم .

اول کلیدی رو میفشاریم و این فرمان اجرا میشه :


edit1.text:=datetimetostr(time);

بعد کلید دومی را میفشاریم و این فرمان اجرا میشه :


edit2.text:=datetimetostr(time);
تا اینجا خیلی راحته و چیزی نیست ولی میخوایم زمان بین فشره شدن این 2 کلید رو محاسبه کنیم و به متن ادیت 3 بدیم :


edit3.text:= ????????????

ضمنا این مقدار که به ادیت 3 داده میشه باید بصورت عددی باشه ( Integer ) چون بعدا میخواد بروش عملیات ریاضی انجام بشه . ممنونم .
لطفا راهنمایی بفرمایید .

shaniaki
یک شنبه 09 شهریور 1382, 15:34 عصر
با عرض ادب:
خدمت جناب Microsoft عزیز عرض کنم که 3 سال پیش که می خواستم برنامه تبدیل تاریخ شمسی به میلادی رو بنویسم کلی در مورد انواع تاریخ و زمان ها و طریقه نگه داری شون مطلب جمع کردم.
مرسوم ترین روش برای نگه داری تاریخ و زمان (که یک مدل آن در ویندوز استفاده می شود و آنطور که به یاد دارم کنم دلفی هم مشابه همین عمل می کند) این است که مثلا مجموع میلی ثانیه های گذشته از یک مبدا زمانی (مثلا اول ژانویه 1900) را در یک عدد صحیح بزرگ ذخیره می کنند. لذا با یک تفریق ساده مشکل شما حل می شود. یک مدل دیگر آن هم که باز در ویندوز موجود است این است که سال و ماه و دقیقه و ساعت و ثانیه را در یک Record یا Structure ذخیره می کنند که در این مورد کاربردی ندارد(در API ویندوز دستورات کار و تبدیل آن ها موجود است)
در دلفی مثل اینکه اینگونه باشد که در یک متغیر اعشاری که قسمت صحیح آن تعداد روز های گذشته از مبدا زمانی و قسمت اعشاری کسر گذشته از روز است این کار صورت می پذیرد.
TDateTime در دلفی این کار را انجام می دهد و خیلی هم کامل است. دو زمان را بگیرید(اگر اشتباه نکنم با تابع Now) واز هم کم کنید. قسمت صحیح تعداد روز بین دو زمان و قسمت اعشاری کسری از روز است که بین دو زمان سپری شده.
متاسفانه اینجا دلفی ندارم اگر مشکل حل نشد بفرمایید source تقدیم کنم.

یه عشق برنامه نویسی خفن

Kambiz
یک شنبه 09 شهریور 1382, 18:07 عصر
اگر فقط می‌خواهید میزان گذشت زمان بین دو رویداد را محاسبه کنید بهتر از از تابع GetTickCount ویندوز استفاده کنید. این تابع زمان گذشته از شروع ویندوز را بر حسب میلی ثانیه برمی‌گرداند.

houshmand
یک شنبه 09 شهریور 1382, 19:32 عصر
:!:


edit1.text:=datetimetostr(time);


edit2.text:=datetimetostr(time);

غلطه ای غلطه! :wink:
برای اینکه تابع Time فقط مقدار ساعت را برمی گرداند و dateTimeToStr هم تاریخ و هم ساعت را که در نتیجه یک تاریخ اشتباه نشان داده می شود
که برای نشان دادن ساعت تنها می توان:

Edit1.Text:= TimeToStr(Time);
یا برای گرفتن تاریخ و ساعت از Now به جای Time استفاده کرد
//××××××××××××××××××××××××× ×××××××××××××××××
برای نمایش مدت زمان بین دو تا ساعت خاص:



var
StTime,EndTime:TDateTime;

//***********************


procedure TForm1.Button1Click(Sender: TObject);
begin
StTime:=Now;
Edit1.Text:=DateTimeToStr(StTime);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
EndTime:=Now;
Edit2.Text:=DateTimeToStr(EndTime);
Edit3.Text:=IntToStr(Round(24.0*60.0*1000.0*(EndTi me-StTime)));
end;


موفق باشید

Microsoft
یک شنبه 09 شهریور 1382, 22:33 عصر
آقایون از لطف شما متشکرم .

غلطه آی غلطه !

دوست خوشگلم . من زدم همچی یه چیزایی نشون داد . نمیدونستم غلطه . ممنونم از راهنمایی شما .

آقای محیط دلفی از شما هم سپاسگذارم .

آقای shaniaki از شما هم خیلی خیلی ممنونم . لطف کردی .

با تشکر .

behnam_dr
چهارشنبه 18 مهر 1386, 14:56 عصر
در پاسخ به این سوال که ، چطوری میشه مدت زمان بین 2 ساعت خاص رو محاسبه کرد ؟
من یه کد ابتکاری نوشتم که این کارو انجام میده (دقیقه و ساعت رو کامل عنوان میکنه)
procedure TForm1.Button1Click(Sender: TObject);
var x,y:TDateTime;
Min:integer;
begin
x:=strtotime(edit2.Text);
y:=strtotime(edit3.text);
Min:=(Round(24.0*60.0*(x-y)));
Label4.Caption:=inttostr(min div 60)+':'+inttostr(min mod 60);
end;
سپاسگذارم

SYNDROME
چهارشنبه 18 مهر 1386, 16:05 عصر
با سلام
می توانی ساعت را تبدیل به دقیقه کنی و سپس از هم کم کرده و دوباره به ساعت تبدیل کنی.
موفق باشید

vcldeveloper
چهارشنبه 18 مهر 1386, 16:59 عصر
آقایون، تاریخ پست را دقت کردید؟! از سال 82 تا سال 86 چند روز فاصله هست؟!!