PDA

View Full Version : جمع کردن ساعت ها و روزها (بدست آوردن سال و ماه و روز+ ساعت و دقیقه و ثانیه)



hamid-nic
جمعه 14 خرداد 1389, 13:59 عصر
سلام دوستان وقتتان بخیر
یه مشکلی با این تاریخ و ساعت دارم .
فرض کنید امروز یعنی 1389/03/14 ساعت 13:46:23 را داریم .
به این مقدار اولیه مقدار ساعت 70:45:00 را اضافه می کنیم .
خروجی را به چه شکلی بدست آورم که مثلا بشه :
1389/03/17 ساعت 05:34:45
(البته خروجی که بالا نوشتم دقیقا درست نیست فقط می خواستم منظور را برسانم)

حسین شهریاری
جمعه 14 خرداد 1389, 14:10 عصر
سلام

برای ساعت که میتونین اونا با استفاده از توابع تبدیل نوع که برای اینکار تعبیه شده جمع یا تفریق کنین.

مثال:

Edit1.text:=timetostr(strtotime('13:46:23 ')+strtotime('70:45:00'));

ولی برای تاریخ کمی فرق میکنه چون تاریخ میلادی با تاریخ ما متفاوت هست اگه اینطور نبود توابع Datetostr و Strtodate هم بود ولی اونا بر حسب تاریخ میلادی کار میکنن.

برای حل مشکل تاریخ هم میتونی روز و ماه و سال را دو رقم دو رقم جدا کنین و پس از تبدیل نوع جمع و تفریقهای لازم را روشون انجام بدین و دوباره به رشته تبدیلش کنین.البته در جمع کردن باید شرطهای دقیقی برای کنترل زمان داشته باشین.

موفق باشید

hamid-nic
جمعه 14 خرداد 1389, 14:19 عصر
سلام حسین آقا ممنون از جوابتون
اما کدی که گذاشتید برای ساعت 70:45:00 جواب نمی دهد برای اینکه باید فرمت ساعت را رعایت کرد یعنی نهایتاً ساعت باید 24 باشه که حتی خوده 24 را هم قبول نمی کنه و باید به جاش 00 گذاشت .
از توابع موجود در دلفی نمیشه کاری کرد .
البته یک سری توابع را دیدم مثل مقدار ساعت یا دقیقه و . . . بین دو پارامتر اما مشکل من چیز دیگه ای است .:متفکر:

vcldeveloper
جمعه 14 خرداد 1389, 14:56 عصر
شما می تونید تاریخ رو به میلادی برگردونید، اون وقت، با استفاده از توابع IncHour و IncMinute، ساعت و دقیقه مورد نظرتان را به تاریخ و ساعت مربوطه اضافه کنید. وقتی محاسبات تان را انجام دادید، فقط برای نمایش تاریخ و ساعت به کاربر، تاریخ و ساعت میلادی را به شمسی تبدیل کنید.

hamid-nic
جمعه 14 خرداد 1389, 15:27 عصر
آقای کشاورز ممنون
من این تابع ها که نام بردید را از راهنمای دلفی پیدا کردم

function IncHour(const AValue: TDateTime; const ANumberOfHours: Int64 = 1):
function IncMinute(const AValue: TDateTime; const ANumberOfMinutes: Int64 = 1):
function IncSecond(const AValue: TDateTime; const ANumberOfSeconds: Int64 = 1):
چطوری باید این ها را باهم تلفیق کنم ؟ چون هم ساعت هم دقیقه و هم ثانیه باید اضافه بشه .
با تبدیل تاریخ ها به شمسی و میلادی مشکلی ندارم اما من یک تاریخ و یک ساعت(شامل ساعت ، دقیقه ، ثانیه) دارم که قراره یه میزان ساعت و دقیقه و ثانیه به اون اضافه بشه . که پس از اضافه شدن باید ساعت و تاریخ اون را بدست آورم .
ممنون میشم اگر راهنمایی کنید .

vcldeveloper
جمعه 14 خرداد 1389, 17:09 عصر
چطوری باید این ها را باهم تلفیق کنم ؟ چون هم ساعت هم دقیقه و هم ثانیه باید اضافه بشه .
یکی یکی اضافه کنید دیگه، نیازی به با هم اضافه کردن نیست. شما یک مقدار TDateTime دارید، وقتی با IncHour ساعتی بهش اضافه کردید، به مقدار به دست آمده، با استفاده از IncMinute دقایق را اضافه کنید، و الی آخر.

hamid-nic
شنبه 15 خرداد 1389, 00:45 صبح
سلام آقای کشاورز عزیز
من کدی به این شکل نوشتم .
DateUtils
.
.
.
.
.
.
procedure TForm1.ProccessClick(Sender: TObject);
var
Date :TDateTime;
H,M,S : byte;
begin
H := StrToIntDef(Hour.Text,0);
M := StrToIntDef(minute.Text,0);
S := StrToIntDef(second.Text,0);

Date := now;
Date := IncHour(Date,H);
Date := IncMinute(Date,M);
Date := IncSecond(Date,S);

result.Text :=DateTimeTostr(Date);
end;
به نظر شما این کد کامله ؟
من اجرا کردم و خروجی گرفتم . اگر احیاناً مشکلی داره راهنمایی کنید تا درستش کنم .
ممنون .

vcldeveloper
یک شنبه 16 خرداد 1389, 00:33 صبح
من اجرا کردم و خروجی گرفتم . اگر احیاناً مشکلی داره راهنمایی کنید تا درستش کنم .
مشکلی برای کاری که میخواد انجام بدید، درش ندیدم.

hamid-nic
یک شنبه 16 خرداد 1389, 00:59 صبح
سلام یه سوال دیگه برام پیش اومد .
حالا اگه بخواهیم فاصله ی مابین اون ساعت و تاریخ بدست اومده را با ساعت و تاریخ زمان حال بدست بیاریم باید از چه روشی استفاده کنم .
یعنی مثلا ما اومدیم مقدار ساعت و دقیقه دلخواه را به مقدار ساعت و تاریخ زمان حال اضافه کردیم و با روش پست قبل تاریخ و ساعت مورد نظر در آینده را بدست آوردیم و اون را در بانک ذخیره کردیم و در روزه های بعد مقدار فاصله مابین تاریخ و ساعت زمان حال با تاریخ و ساعت ذخیره شده در بانک را بتوانیم ببینیم .
مثلا خروجی این باشه :
2 روز و 34 ساعت و 25 دقیقه و 10 ثانیه مانده تا تاریخ مورد نظر

vcldeveloper
یک شنبه 16 خرداد 1389, 03:33 صبح
حالا اگه بخواهیم فاصله ی مابین اون ساعت و تاریخ بدست اومده را با ساعت و تاریخ زمان حال بدست بیاریم باید از چه روشی استفاده کنم .
می تونید تاریخ ها (نوع داده TDateTime) را مثل دو عدد معمولی از هم تفریق کنید، تا فاصله آنها به دست بیاد. اگر میخواد فاصله با واحد خاصی باشه (مثلا تعداد روزهای سپری شده، یا تعداد ساعات گذشته شده)، می تونید از توابعی مثل HoursBetween یا DaysBetween و غیره استفاده کنید.

hamid-nic
دوشنبه 17 خرداد 1389, 09:16 صبح
می تونید تاریخ ها (نوع داده TDateTime) را مثل دو عدد معمولی از هم تفریق کنید، تا فاصله آنها به دست بیاد.
من دو تا تاریخ مثل هم را از هم کم کردم جواب شد :
1899/12/30 12:00:01 ق.ظ
مگه نباید جواب صفر یا یه چیزی توی این مایه ها بشه :متفکر:

حسین شهریاری
دوشنبه 17 خرداد 1389, 10:03 صبح
مگه نباید جواب صفر یا یه چیزی توی این مایه ها بشه
12:00 در اصل همون صف هست دیدین توی ساعتهای دیجیتالی وقتی به ساعت 12 شب میرسه یک لحظه 00:00 را نشون میده!

hamid-nic
دوشنبه 17 خرداد 1389, 10:38 صبح
12:00 در اصل همون صف هست دیدین توی ساعتهای دیجیتالی وقتی به ساعت 12 شب میرسه یک لحظه 00:00 را نشون میده!
پس تاریخ چی ؟ مقدار اون 1899/12/30 چرا ؟ :متفکر: