التعامل مع التاريخ والوقت في الدوت نت

 مقدمة:
كي تتعامل مع كل من التاريخ والوقت, يوجد كلاسين وهما DateTime,TimeSpan اللذان يحويان العديد من التوابع والاجراءات التي تساعدك وتسهل عليك التعامل مع الوقت والتاريخ .. حيث بإمكانك مثلاً حساب العمر اعتماداً على تاريخ الميلاد او حساب كم تبقى من الايام (او حتى الساعات) على تاريخ ميلادك.

screenshot of our example




1-     كود عرض التاريخ والوقت الحالي حسب منطقتك الزمنية ومحسب توقيت غرينتش:
private void timer1_Tick(object sender, EventArgs e)
{
    lblDateTime.Text = DateTime.Now.ToString();
    lblUTC.Text = DateTime.UtcNow.ToString();
}
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer1.Tick
     lblDateTime.Text = DateTime.Now.ToString() 
    lblUTC.Text = DateTime.UtcNow.ToString()
End Sub


الشرح:
لعرض الوقت والتاريخ الحالي نستخدم الخاصية Now التابعة للكلاس DateTime, أما من اجل عرض الوقت التاريخ حسب غرينتش نستخدم الخاصية UtcNow التابعة للكلاس DateTime أيضاً.
من اجل عرض الوقت بشكل مستمر يجب وضع كود عرض الوقت والتاريخ ضمن Timer حيث نضبط الخاصية Interval التابعة للـ Timer إلى 1000 اي كل ثانية سيتم تنفيذ كود الحدث Tick التابع للـ Timer والذي وضعنا فيه تعليمات عرض الوقت والتاريخ.

2-     كود حساب العمر:
private void btnGetAge_Click(object sender, EventArgs e)
{
    double age =Math.Truncate(DateTime.Today.Date.Subtract(dtp.Value.Date).TotalDays / 365);
    lblAge.Text = age.ToString();
}
Private Sub btnGetAge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetAge.Click 
    Dim age As Double = Math.Truncate(DateTime.Today.Date.Subtract(dtp.Value.Date).TotalDays / 365) 
    lblAge.Text = age.ToString()
End Sub
الشرح:
اولاً قمنا بإضافة أداة DateTimePicker (أداة التقويم) التي تتيح لنا إدخال قيمة من نوع تاريخ وسنستعملها من اجل تحديد تاريخ الميلاد .. اسم الاداة في الكود كما ترى dtp.
لحساب العمر يجب ان نقوم بطرح التاريخ الحالي من تاريخ الميلاد وحساب فارق الايام ثم تقسيم الناتج على 365 عدد ايام السنة:
DateTime.Today.Date.Subtract(dtp.Value.Date).TotalDays / 365

حيث نحصل على تاريخ اليوم من خلال الخاصية Now او Today ثم نختار اننا نريد التاريخ فقط لان الخاصية Today تعيد تاريخ اليوم والوقت الحالي ايضاً لذلك قمنا بأخذ التاريخ فقط عن طريق الخاصية Date ثم قمنا بطرح تاريخ اليوم من تاريخ الميلاد الذي نحصل عليه من الاداة dtp (DateTimePicker). نحصل على الفرق بين التاريخين من خلال التابع Subtract ثم نقوم بعرض الفرق بالايام من خلال الخاصية TotalDays.
ولكن الناتج الذي يعيده التابع Subtract  هو من النوع double اما نحن فنحتاج إلى القسم الصحيح فقط من الرقم لذلك نقوم بأخذ القسم الصحيح فقط عن طريق التابع Truncate الموجود في المكتبة Math.

3-     كود معرفة هل هذه السنة سنة كبيسة ام لا:
lblLeapYear.Text = (DateTime.IsLeapYear(DateTime.Now.Year)?"نعم":"لا");
lblLeapYear.Text = IIf(DateTime.IsLeapYear(DateTime.Now.Year), "لا, " نعم)

 
نستخدم التابع IsLeapYear الموجود في الكلاس DateTime لمعرفة هل السنة كبيسة حيث يعيد هذا التابع قيمة Boolean يعني اما True أو False مع الانتباه إلى انه يجب تمرير السنة التي نريد معرفة هل هي كبيسة.

4-     كود معرفة عدد أيام الشهر:
lblLastDay.Text = DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month).ToString();
lblLastDay.Text = DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month).ToString()



ايضاً من خلال الكلاس DateTime نستطيع الحصول على عدد ايام الشهر بواسطة التابع DaysInMonth وذلك بعد تمرير السنة والشهر لمعرفة عد الايام.

5-     كود حساب عدد الايام المتبقية على عيد ميلادك:
DateTime birthDate = new DateTime(DateTime.Today.Year, dtp.Value.Month, dtp.Value.Day);
lblBirthDays.Text = birthDate.Subtract(DateTime.Today).TotalDays.ToString();
Dim birthDate As New DateTime(DateTime.Today.Year, dtp.Value.Month, dtp.Value.Day)
lblBirthDays.Text = birthDate.Subtract(DateTime.Today).TotalDays.ToString()
الشرح:
للحصول على عدد الايام المتبقية على عيد ميلادك نطرح تاريخ عيد ميلادك القادم من تاريخ عيد ميلادك الاول. اولاً قمنا بتعريف متحول من النوع DateTime يحمل قيمة تاريخ ميلادك القادم ثم قمنا بطرح هذا التاريخ من تاريخ اليوم للحصول على عدد الايام.


8 تعليقات

يسلمو على المعلومات الحلوة
ولله على راسي من فوق يا وردة
nezar78@ymail.com

رد

عفواً ,, شكراً لك

ان شاء الله اكون استفدت

رد

والله يا صديقي هاي ما اشتغلت عندي
Math.truncate
وحاولت اعمل امبورتس للباكج كمان
Imports System.Math
علما اني بستخدم الفيجيوال بيسك دوت نت 2003

رد

صديقي الغالي ..جربتها وزبطت من غير
math.truncate
ومشى الحال
وهلأ قرأت انه الكود عندك على السي شارب
والله ما اجا ببالي لما كنت اشتغل من 5 سنين قبل ما انقطع عن البرمجة انه في كود جاهز للعمر
كنت احسبها حساب
بهذا الشكل


Dim year, month, day As Integer
Dim cyear, cmonth, cday As Integer
Dim youryear, yourmonth, yourday As Integer

L1.Visible = True
L1.Items.Clear()
If T1.Text = "" OrElse T2.Text = "" OrElse T3.Text = "" Then
MsgBox("Please fill the boxes")
ElseIf Val(T1.Text) > 2006 OrElse Val(T1.Text) < 1900 Then
MsgBox("Please Mr ASSHOLE be SERIOUS..Fill 'YEAR' box with logical value")
ElseIf Val(T2.Text) > 12 OrElse Val(T2.Text) < 1 Then
MsgBox("Please Mr ASSHOLE be SERIOUS..Fill 'MONTH' box with logical value")
ElseIf Val(T3.Text) > 31 OrElse Val(T3.Text) < 1 Then
MsgBox("Please Mr ASSHOLE be SERIOUS..Fill 'DAY' box with logical value")
Else
year = Val(T1.Text)
month = Val(T2.Text)
day = Val(T3.Text)
cyear = Now.Year
cmonth = Now.Month
cday = Now.Day
If cday < day And cmonth < month Then
cyear -= 1
cmonth += 12
End If
If cday < day Then
cmonth -= 1
cday += 30
End If
If cmonth < month Then
cyear -= 1
cmonth += 12
End If
yourday = cday - day
yourmonth = cmonth - month
youryear = cyear - year

رد

لقيت الحل في الفي بي دوت نت
decimal.truncate
and not math

رد

اريد عمل كود يأخذ فقط الوقت من قاعدة البيانات وبالسي شارب

رد

إرسال تعليق