الشكر لله والحمد لله
والحمد لله على كل حال
بخصوص السؤال ابسط ما يمكننى الرد عليه
اعطي لكل ذي حق حقه
بمعنى عندما نتحدث عن شئ كا وقت فيفضل ان يسجل كا وقت
وعندما نتحدث عن شئ كا نص يبقي نص وكذلك الارقام وما غيره
لان اشاهد الكثير خصوصاً فى مراحل التعليم يعتمد على
جعل الامر نص للاعمدة حتى يرتاح البال
وبما اننا نتحدث عن وقت لعدد الساعات
وليس الوقت الفعلى ولا هو يناسب التاريخ
لكونه الناتج النهائي من العملية الحسابية لعدد الساعات
باصح الجزء المشير اليه هنا فى هذا
إقتباس :6.40 + 0.60 = 7
مع العلم اننا نتعامل مع الوقت وهو ينتهي عند ٦٠ وليس ١٠٠
وهو غير صحيح لانك بعد جلب عدد الساعات لم تقوم بعملية جمع ولا طرح
واذا قلنا احتمالية يتم عملية الطرح والجمع لاسباب مثل عدد الساعات الاضافية وما شبه
ولكنها كان من الاحق انها تتم فى كود الـ
function بهذا السطر
كود :
myTime = (stopTime - startTime) + TimeSpan.FromMinutes(60);
والـ 60 هنا يشير الى الدقائق
يعنى لو كان عندك وقت مثل 6:40 فهنا عليك عمل 6*60 + 40
ليصبح الاجمالى هو 400 يضع بدلاً من 60
طيب على الامور الواقع كيفق سيكون الكود
تعال كده على كود الـ
function واستبدل القديم بهذا
كود :
public TimeSpan GetHours(DateTime startTime, DateTime stopTime, int addTime = 0)
{
TimeSpan myTime = new TimeSpan();
myTime = stopTime - startTime;
myTime = myTime + TimeSpan.FromMinutes(addTime);
return myTime;
}
طبعاً مش محتاج الشرح انت ستلاحظ ما تم اضافته
عن الكود فى الرد السابق
الان ناتى على كود الاستخدام فى الحدث
ناتى فى الكود الاول وهو عندما يكون الكود بدون اى اضافات للوقت الرئيسي
سيكون الاستخدام بهذا الشكل
كود :
TimeSpan GetTime = new TimeSpan();
DateTime srtTime = Convert.ToDateTime("10:00");
DateTime stpTime = Convert.ToDateTime("16:40");
GetTime = GetHours(srtTime, stpTime);
MessageBox.Show(GetTime.Hours + ":" + GetTime.Minutes);
لو تلاحظ انه لا يوجد اى فرق ولا تغيير عن الكود فى ردى السابق
وعند اختبار الكود ستجد ان عدد الساعات الناتج هو 6:40
طيب لو حبينا نعمل اضافة عدد الساعات والدقائق الاضافية
كل ما عليك فعله هو التالى جلب اجمالى عدد الدقائق من الوقت المطلوب اضافته
ليتم وضعه واستخدامه كالتالى
كود :
TimeSpan GetTime = new TimeSpan();
DateTime srtTime = Convert.ToDateTime("10:00");
DateTime stpTime = Convert.ToDateTime("16:40");
GetTime = GetHours(srtTime, stpTime, 60);
MessageBox.Show(GetTime.Hours + ":" + GetTime.Minutes);
بما انك قلت فى الرد السابق +0.60
فلاحظ استخدمت الـ 60 وهى تعنى ساعة كاملة
عند المعينة والاختبار ستجد الناتج بالنهاية هو 7 ساعات و 40 دقيقة
بدلاً من 6 ساعات و 40 دقيقة
ناتى بالنهاية كيف يتم حفظ القيمة فى قاعدة البيانات
هل استخدم نوع العمود تاريخ ووقت او اختار نص او رقم
طبعاً انا احبب دائماً الاستخدام لما هو يعنى لانه سيفيد وسيسهل الامور كثيراً
خصوصاً فى التقارير قبل الفورم
فعند عمل الحفظ فى قاعدة البيانات بعمود من نوع تاريخ ووقت
فيجب عليك ان تحدد نوع التنسيق لخصائص العمود فاذا كنت تستخدم الـ Access
فان تجعل النوع هو Short Time
حتى تتجنب مشكلة وجود التاريخ والثواني وكذلك رمز صباحاً ومساءاً
وبكدة ستكون حليت المشكلة تماماً
ويبقي الشئ الاخير عند عرضها فى التقارير وهو ظهور التاريخ مع الوقت لعدد ساعات العمل
كل ما عليك تعدل خصائص الـ Text فى التقارير وتعطي نوع وقت فقط وبكدة تكون انهيت الامر
اعلم ان الشرح كثيراً وقد تحس بمتاهة
بس عيد مرة واتنين قراءة الامر ستوضح الامر كلياً لك وستتعلم منه بامر الله
من السهل ان اعطي رداً بحل يخلصك لما تريد
ولكن العلم ليس من السهل ان تجده فى احد ان يعطيك ايه بدون مقابل
فالحمد لله على كل حال
بناء مشروع بصورة صحيحة
يجعلك فخوراً من نفسك اولاً
ويجعل الامر معك بسيطاً وسهلاً فى التعديل والتطوير به
تحياتى لك
وتمنياتى لك التوفيق