معالجة الوقت والتاريخ - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : معالجة الوقت والتاريخ (/showthread.php?tid=5237) |
معالجة الوقت والتاريخ - RaggiTech - 06-10-12 كاتب الموضوع : محمد الناشـري
فئة DateTimeتستخدم الفئة DateTime في تخزين القيم الخاصة بالتاريخ والوقت وتعد احد أنواع البيانات الأساسية في بيئة Framework . ويتم تخزين القيم الخاصة بالتاريخ والوقت داخلياً كأرقام من نوع Double .بسم الله ارحمن الرحيم معالجة الوقت والتاريخ يتعلق الجزء الصحيح من القيمة بالتاريخ بينما يتعلق الجزء الكسرى بالوقت . لتحويل متغير من نوع DateTime يمكنك استخدام الأسلوب ToOADateTime ( سيتم الحديث عنه لاحقاً) الذي ينتج قيمة هي عبارة عن تاريخ متوافق مع OLE Automation. خصائص الفئة DateTime 1.خاصية Date تنتج خاصية Date التاريخ من قيمة تاريخ /وقت. وتصبط الوقت على منتصف الليل Dim date1 As DateTime date1 = Now() Date_txt.Text = date1.Date 2.خاصيتا DayofWeek و DayofYear تنتج هاتان الخاصيتان أحد أيام الأسبوع ويشار إلية برقم يتراوح بين 1و7 ورقم هذا اليوم بالنسبة للعام ويشار إلية برقم يتراوح بين 1و365 او366 للسنوات الكبيسة . dayofyear_txt.Text = date1.DayOfWeek dayofweek_txt.Text = date1.DayOfYear 3.خصائص Millisecond و Second و Minute و Hour تنتج هذه الخصائص جزء الوقت المقابل في قيمة التاريخ التي تم تمريرها كوسيط . millisecond_txt.Text = Date.Now.Millisecond second_txt.Text = Date.Now.Second Minute_txt.Text = Date.Now.Minute hour_txt.Text = Date.Now.Hour 4.خصائص Day وMonth و Year تنتج هذه الخصائص الثلاث اليوم والشهر والعام للقيمة DateTime . وتتخذ خاصيتا Day وMonth قيما رقمية ويمكن تحويلها إلى سلسة الأحرف الملائمة ( اسم اليوم والشهر ) باستخدام دالتي WeekDayName() و . MonthName() year_txt.Text = Date.Now.Year Month_txt.Text = Date.Now.Month & " // " & MonthName(Now.Month) day_txt.Text = Date.Now.Day & " // " & WeekdayName(Now.Day) وتقبل الدالتان كلتاهما رقم اليوم ( من 1 إلى 7 ) ورقم الشهر ( من 1 إلى 12) كوسيط وتنتج الاسم . ويمكن استخدام القيمة 13 مع التقويم الذي يحتوى ثلاثة عشر شهر . كما تقبل هاتان الدالتان وسيطاً اختياريا ثالثا وهو القيمة True & False وتوضحان ما إذا كانت الدالة ينبغي أن تنتج الاسم المختصر True أو الاسم الكامل False. الدالة WeekDayName() وسيطاً اختيارياً ثالثاً وهو الذي يحدد اليوم الأول من الأسبوع . قم بضبط هذا الوسيط على احد عناصر ترقيم FirstDayOfWeek Month_txt.Text = Date.Now.Month & " // " & MonthName(Now.Month, True) day_txt.Text = Date.Now.Day & " // " & WeekdayName(Now.Day,_ FirstDayOfWeek.Saturday) ..... يتبع ..... معالجة الوقت والتاريخ - RaggiTech - 06-10-12 تابع خصائص الفئة DateTime 5.خاصية Ticks وهي تنتج عدد اللحظات من قيمة تاريخ او وقت وتساوي كل لحظة 100 نانوثانيه . ولتحويل عدد محدد من اللحظات إلى ما يقابلها بالملي ثانية اضرب هذا العدد في 10.000 او استخدم الخاصية TickPerMillisecond الخاصة بالكائن TimeSpan والتي سنتناولها لاحقاً. Ticks_txt.Text = (Date.Now.Ticks) 6.خاصية TimeOfDay تنتج هذه الخاصية الوقت من قيمة تاريخ أو وقت . timeofday_txt.Text = Now().TimeOfDay.ToString أساليب الفئة DateTime 1.أسلوب Compare وهو من الأساليب المشتركة التي تقارن بين قيمتي تاريخ او وقت وتنتج قيمة على شكل عدد صحيح توضح الترتيب النسبي لهاتين القيمتين Dim date1 As DateTime Dim date2 As DateTime date1 = Now() date2 = date2_txt.Text result_txt.Text = System.DateTime.Compare(date1, date2) ينتج هذا الاسلوب عدد صحيحا يكون عبارة عن( -1 ) اذا كان date1 اقل من Date2 . وينتج القيمة( 0) اذا كانت القيمتان متساويتان و ينتج القيمة (1 ) اذا كانت date1 اكبر من .Date2 2.اسلوب DaysInMonth وهو ينتج عدد الأيام في شهر محدد ويقبل كلاً من الشهر والعام كوسائط daysinmonyh_txt.Text = " عدد ايام شهر فبراير لعام 2009 هو " _ & System.DateTime.DaysInMonth(2009, 2) 3.اسلوب FromOADate وهو يقوم بانشاء قيمة تاريخ /وقت من نوع OLE Automation ويجب أن يكون الوسيط dtvalue عبارة عن قيمة من نوع Double تتراوح مابين -657.434 وهو اليوم الأول من عام 100 و 2.958.465 وهو اليوم الأخير من عام 9999 . fromoadate_txt.Text = System.DateTime.FromOADate(dtvalue) اسلوب IsleapYear ينتج هذا الاسلوب القيمة True & False التي توضح ما اذا كان العام المحدد هو عام كبيس ام لا. Dim leapyear As Boolean leapyear = System.DateTime.IsLeapYear(leapyear_txt.Text) isleap_txt.Text = leapyear اسلوبا Add و Subtract سنتناولهما بالتفصيل عندما نتناول الفئة TimeSpan . ---- يتبع ----- معالجة الوقت والتاريخ - RaggiTech - 06-10-12 إضافة فترات زمنية فاصلة للتواريخ :هناك العديد من الاساليب التي تضيف فترات زمنية فاصلة محددة الي قيمة تاريخ أو وقت ويقبل كل اسلوب عدد الفترات الزمنية الفاصلة من أيام وساعات وماالى ذلك .. التي ستتم اضافتها الى النسخة الحالية من فئة DateTime . ونذكر فيما يلي هذة الاساليب : اسلوب AddYears اسلوب سAddMonth اسلوب AddDays اسلوب AddHours اسلوب AddMinuts اسلوب AddSeconds اسلوب AddMilliseconds اسلوب AddTicks مثال Dim addate As Date addate = Now() addate = addate.AddYears(1) add_txt.Text = " اضافة سنة لللتاريخ الحالي = " & addate ملاحظة : اذا كان الوسيط عبارة عن قيمة سالبة يتم طرح الفترات الزمنية المقابلة من النسخة الحالية من الفئة . وتقوم العبارة التالية بطرح دقيقتين من متغير من نوع Date Addate=addate.AddMinutes(-2) أساليب تحويل التاريخ1.أسلوب ToFileTime يقوم هذا الاسلوب بتحويل قيمة القئة Date الى التنسيق الخاص بالوقت المحلي لملفات النظام وهناك أيضاً اسلوب مكافئ وهو اسلوب FromFileTime الذي يقوم بتحويل القيمة الخاصة بوقت الملف الى قيمة من نوع Date . Label32.Text = Date.Now.ToFileTime 2.اسلوب ToLocalTime يقوم هذا الاسلوب بتحويل قيمة الوقت تبعاً لنظام التوقيت الدولي UTC الى التوقيت المحلي . Label33.Text = Date.Now.ToLocalTime 3.أسلوباToShortDateString & ToLongDateString يقومان هذا الاسلوبان بتحويل الجزء الخاص بالتاريخ الى سلسة أحرف لها تنسيق التاريخ المفصل أو المختصر . Label37.Text = Date.Now.ToLongDateString Label35.Text = Date.Now.ToShortDateString 4.أسلوباToShortTimeString & ToLongTimeString يقومان هذان الاسلوبان بتحويل الجزء الخاص بالوقت الى سلسلة الأحرف لها تنسيق الوقت المفصل أو المختصر. Label45.Text = Date.Now.ToLongTimeString Label43.Text = Date.Now.ToShortTimeString 5.اسلوب ToOADate يقوم هذا الاسلوب بتحويل النسخة الحالية من الفئة DateTime الى تاريخ متوافق مع OLE Automation. Label41.Text = Date.Now.ToOADate 6.اسلوب ToUniversalTime يقوم هذا الاسلوب بتحويل بتحويل النسخة الحالية من الفئة DateTime الى النظام التوقيت الدولي . Label39.Text = Date.Now.ToUniversalTime ---- يتبع ---- معالجة الوقت والتاريخ - RaggiTech - 06-10-12 فئة TimeSpan الفئة TimeSpan تمثل فترة زمنية فاصلة ويمكنك التعبير عنها باستخدام العديد من الوحدات المختلفة .سواءً كانت لحظات أو ملي ثانية أو حتى أيام . وعادة ما تمثل هذة الفئة الفرق بين قيمتي تاريخ ووقت . بيد انة يمكنك ايضاً انشاء فئة TimeSpan لفترة فاصلة محدة لتستخدمها في ماتقوم به من عمليات حسابية . إذا كنت تريد استخدام المتغير الخاص بالفئة TimeSpan في الكود الذي تنشئة فقم بتعريفة باستخدام عبارة كالعبارة التالية Dim TS as New TimeSpan وإذا كنت تريد تعيين قيمة مبدئية للكائن TimeSpan يمكنك ان تضيف عدد الايام والساعات والدقائق والثواني وعدد الملي ثانية التي تتألف منها الفترة الزمنية الفاصلة . كالاتي Dim TS as TimeSpan = New TimeSpan(9,12,1,59) في العبارة السابقة قمنا بتعيين قيمة مبدئية للكائن TimeSpan بحيث تكون الفترة الزمنية لة هي 9 أيام و 12ساعة ودقيقة واحدة و 59ثانية . خصائص الفئة TimeSpanيوفر نوع الفئة TimeSpan الخصائص الموضحة أدناة وتدخل أغلب هذة الخصائص في نطاق الخصائص المشتركة . Empty كائن TimeSpan خالي MaxValue أكبر فترة فاصلة يمكن تمثيلها باستخدام الكائن TimeSpan MinValue أصغر فترة فاصلة يمكن تمثيلها باستخدام الكائن TimeSpan TicksPerDay عدد اللحظات في اليوم TicksPerHour عدد اللحظات في الساعة TicksPerMilliSecond عدد اللحظات في الملي ثانية TicksPerMinute عدد اللحظات في الدقيقة الواحدة TicksPerSecond عدد اللحظات في الثانية الواحدة Zero ضبط الفترة الزمنية لكائن TimeSpanعلى القيمة 0 خصائص الفترات الزمنية . Days العدد الاجمالي للأيام في قيمة TimeSpan الحالية Hours العدد الاجمالي للساعات في قيمة TimeSpan الحالية Milliseconds العدد الاجمالي للملي ثانية في قيمة TimeSpan الحالية حيث أن أكبر قيمة لهذة الخاصية هي 999 Minutes العدد الاجمالي للدقائق في قيمة TimeSpan الحالية حيث أن أكبر قيمة لهذة الخاصية هي 59 Seconds العدد الاجمالي للثواني في قيمة TimeSpan الحالية حيث أن أكبر قيمة لهذة الخاصية هي 59 Ticks العدد الاجمالي للحظات في قيمة TimeSpan الحالية اجمالي عدد الفترات الزمنية الفاصلة الخاصة بقيمة TimeSpan TotalDays اجمالي عدد الأيام في قيمة TimeSpan الحالية TotalHours اجمالي عدد الساعات في قيمة TimeSpan الحالية Milliseconds اجمالي عدد الثواني في قيمة TimeSpan الحالية TotalMinutes اجمالي عدد الدقائق في قيمة TimeSpan الحالية TotalSeconds اجمالي عدد الثواني في قيمة TimeSpan الحالية ---- يتبع --- معالجة الوقت والتاريخ - RaggiTech - 06-10-12 خاصية Durationتنتج هذة الخاصية المدة الزمنية للنسخة الحالية من الفئة TimeSpan حيث يتم التعبير عن هذة المدة بعدد الأيام متبوعا بعدد الساعات والدقائق والثواني والمليثانية. TextBox17.Text = ts.Duration.ToString الأساليب الخاصة بالفترات الزمنية الفاصلة تقوم الاساليب الموضحة أدناة بانشاء كائن TimeSpa جديد لة مدة زمنية محددة ويتم تحديد كل مدة زمنية كعدد من الفترات الفاصلة يتم تقريبها الى أقرب مليثانية . تقبل الاساليب جميعها وسيطا واحدا عبارة عن قيمة من نوع Double . FromDays عدد الأيام التي يحددها الوسيط FromHours عدد الساعات يحددها الوسيط FromMilliseconds عدد الثواني يحددها الوسيط FromMinutes عدد الدقائق يحددها الوسيط FromSeconds عدد الثواني يحددها الوسيط أمثلة Dim tsp As TimeSpan tsp = tsp.Add(System.TimeSpan.FromDays(2)) TextBox21.Text = tsp.ToString tsp = tsp.Add(System.TimeSpan.FromHours(10)) TextBox20.Text = tsp.ToString tsp = tsp.Add(System.TimeSpan.FromMinutes(30)) TextBox19.Text = tsp.ToString tsp = tsp.Add(System.TimeSpan.FromSeconds(500)) TextBox18.Text = tsp.ToString أسلوب Parse(String)يقوم هذا الاسلوب بانشاء كائن TimeSpan جديد من سلسلة أحرف تستخدم تنسيق TimeSpan وهو عبارة عن الأيام متبوعة بنقطة ثم الساعات والدقائق والثواني ويتم الفصل بينهما باستخدام النقطتين المتوازيتين . Dim sp As TimeSpan sp = TimeSpan.Parse("3.12:20:30.500") TextBox27.Text = sp.ToString أسلوب Addيقوم هذا الاسلوب باضافة كائن TimeSpan الى النسخة الحالية من الفئة . Dim ts1, ts3, sp As TimeSpan ts1 = ts1.Add(System.TimeSpan.FromDays(10)) ts3 = ts1.Add(tsp) TextBox26.Text = ts3.ToString أسلوب Subtractيقوم هذا الأسلوب بطرح كائن TimeSpan من النسخة الحالية من الفئة . Dim ts1, ts4, tsp As TimeSpan ts4 = ts1.Subtract(tsp) TextBox25.Text = ts4.ToString أسلوب CompareToيقارن هذا الأسلوب النسخة الحالية من الكائن TimeSpan بكائن TimeSpan آخر . Dim ts1, tsp As TimeSpan TextBox24.Text = ts1.CompareTo(tsp) ينتج الأسلوب CompareTo القيمة (0) اذا كان الكائنان متساويان والقيمة (-1) إذا كانت النسخة الحالية أطول والقيمة (1) إذا كان الكائن TimeSpan الذي تم تمريره كوسيط أطول. أسلوب Equalsينتج هذا الأسلوب القيمة True & False التي توضح ما إذا كان اثنان من كائنات TimeSpan تمثلان الفترة الزمنية نفسها. Dim ts1, tsp As TimeSpan TextBox23.Text = ts1.Equals(tsp) أسلوب Negateيقوم هذا الأسلوب بوضع قيمة سالبة للنسخة الحالية من الكائن TimeSpan . حيث يصبح الكائن TimeSpan ذو القيمة الموجبة ( التي تعرض تاريخا مستقبليا عند اضافتة للتاريخ الحالي ) كائنا ذو قيمة سالبة ( تعرض تاريخا قديما عند إضافته إلى التاريخ الحالي . Dim sp As TimeSpan TextBox22.Text = sp.Negate.ToString معالجة الوقت والتاريخ - RaggiTech - 06-10-12 تم بحمد الله لتحميل الموضوع على هيئة PDF+ مثال Visual studio2008 |