يوفر Java فئة التاريخ في حزمة Java.Util ، التي تغلف التاريخ والوقت الحاليين.
تدعم فئة التاريخ اثنين من المُنشئين. يقوم المُنشئ الأول بتهيئة التاريخ والوقت الحالي للكائن.
تاريخ( )
يتلقى المنشئ التالي معلمة تساوي عدد المللي ثانية منذ منتصف ليل 1 يناير 1970
التاريخ (ملليسيك طويل)
بمجرد وجود كائن تاريخ متاح ، يمكنك استدعاء أي من الأساليب المدعومة التالية لاستخدام الوقت:
| Sn | الطرق والأوصاف |
|---|---|
| 1 | منطقية بعد (تاريخ التاريخ) إرجاع صحيح إذا كان كائن تاريخ المكالمة يحتوي على التاريخ المحدد أو بعد ذلك ، وإلا ، إرجاع خطأ. |
| 2 | منطقية قبل (تاريخ التاريخ) إرجاع صحيح إذا كان كائن تاريخ الاتصال يحتوي على أو قبل التاريخ المحدد في التاريخ ، وإلا ، إرجاع خطأ. |
| 3 | كائن استنساخ () كرر المكالمة إلى كائن التاريخ. |
| 4 | int compareto (تاريخ التاريخ) قارن قيمة كائن المكالمة بالتاريخ. إذا كانت هاتين القيمتين متساوية ، فترتجع 0. إرجاع قيمة سالبة إذا كان كائن الاتصال في وقت مبكر من التاريخ. إرجاع قيمة إيجابية إذا كان كائن الاتصال متأخراً عن التاريخ. |
| 5 | int compareto (Object OBJ) استخدم نفس عملية المقارنة (التاريخ) إذا كان OBJ هو تاريخ الفصل. خلاف ذلك ، فإنه يرمي classcastexception. |
| 6 | منطقية متساوية (تاريخ الكائن) إرجاع صحيح إذا كان كائن تاريخ الاتصال يحتوي على نفس الوقت والتاريخ المحدد ، وإلا ، إرجاع خطأ. |
| 7 | طويل getTime () يعيد عدد المللي ثانية التي مرت منذ 1 يناير 1970. |
| 8 | int hashcode () إرجاع رمز التجزئة لكائن الاتصال. |
| 9 | باطلة settime (وقت طويل) يحدد الوقت المحدد ، والذي يمثل الوقت المنقضي بالمللي ثانية من منتصف الليل في 1 يناير 1970. |
| 10 | سلسلة tostring () استدعاء كائن التاريخ للتحويل إلى سلسلة وإرجاع النتيجة. |
استيراد java.util.date ؛ الفئة العامة datedemo {public static void main (string args []) {// instantiate تاريخ كائن التاريخ = تاريخ جديد () ؛ // عرض وقت وتاريخ باستخدام tostring () system.out.println (date.toString ()) ؛ }}هذا سوف ينتج عنه النتائج التالية:
الاثنين مايو 04 09:51:52 CDT 2009
مقارنة التاريخ
هناك ثلاث طرق لمقارنة تاريخين:
تواريخ التنسيق باستخدام SimpleDateFormat
SimpleDateFormat هي فئة ملموسة تستخدم محليًا لتنسيق التواريخ وتحويلها. يتيح SimpleDateFormat اختيار المخططات المعرفة من قبل المستخدم إلى تنسيق الوقت والوقت. على سبيل المثال:
استيراد java.util.*؛ استيراد java.text.*؛ الفئة العامة datedemo {public static void main (string args []) {date dnow = new date () ؛ SimpleDateFormat ft = new SimplEdateFormat ("e yyyy.mm.dd 'في' hh: mm: ss a zzz") ؛ System.out.println ("التاريخ الحالي:" + ft.format (dNow)) ؛ }}هذا سوف ينتج عنه النتائج التالية:
التاريخ الحالي: Sun 2004.07.18 في 04:14:09 PM PDT
رمز تنسيق DateFormat بسيط
لتحديد تنسيق الوقت ، استخدم سلسلة نمط الوقت. في هذا النمط ، يتم الاحتفاظ بجميع رسائل ASCII كرسائل نمط ، والتي يتم تعريفها على النحو التالي:
| شخصية | يصف | مثال |
|---|---|---|
| ز | مؤشر الوقت | إعلان |
| ذ | أربع أرقام سنوات | 2001 |
| م | منتصف العام | يوليو أو 07 |
| د | تاريخ الشهر | 10 |
| ح | الوقت صباحًا/مساءً (1 ~ 12) | 12 |
| ح | ساعة في اليوم (0 ~ 23) | إثنان وعشرون |
| م | دقائق من الساعات | 30 |
| ق | ثواني من الدقائق | 55 |
| ق | ميلي ثانية | 234 |
| ه | يوم الأسبوع | يوم الثلاثاء |
| د | يوم العام | 360 |
| و | يوم الأسبوع في الشهر | 2 (الأربعاء الثاني في يوليو) |
| ث | أسبوع منتصف العام | 40 |
| ث | أسبوع الشهر | 1 |
| أ | علامات AM/PM | مساءً |
| ك | ساعة في اليوم (1 ~ 24) | أربعة وعشرون |
| ك | ساعات صباحًا/مساءً (0 ~ 11) | 10 |
| ض | المنطقة الزمنية | التوقيت القياسي الشرقي |
| ' | اترك النص | محدد |
| " | اقتباسات واحدة | ` |
استيراد java.util.date ؛ الفئة العامة datedemo {public static void main (string args []) {// instantiate تاريخ كائن التاريخ = تاريخ جديد () ؛ // عرض الوقت والتاريخ باستخدام ToString () String str = string.format ("التاريخ الحالي/الوقت: ٪ TC" ، التاريخ) ؛ system.out.printf (str) ؛ }}هذا سوف ينتج عنه النتائج التالية:
التاريخ/الوقت الحالي: السبت 15 ديسمبر 16:37:57 MST 2012
إنها ممارسة سيئة لتوفير تنسيق متعددة من التواريخ. يمكن أن تشير سلسلة التنسيق إلى فهرس المعلمات المراد تنسيقها.
يجب أن يتبع الفهرس على الفور ٪ ويجب إنهاءها بمقدار $. على سبيل المثال:
استيراد java.util.date ؛ الفئة العامة datedemo {public static void main (string args []) {// instantiate تاريخ كائن التاريخ = تاريخ جديد () ؛ // عرض وقت وتاريخ باستخدام tostring () system.out.printf ("٪ 1 $ s ٪ 2 $ tb ٪ 2 $ td ، ٪ 2 $ ty" ، "تاريخ الاستحقاق:" ، التاريخ) ؛ }}هذا سوف ينتج عنه النتائج التالية:
تاريخ الاستحقاق: 09 فبراير 2004
بدلاً من ذلك ، يمكن استخدام <العلم. وهذا يعني نفس المعلمات ويجب استخدامها مرة أخرى وفقًا لمواصفات التنسيق أعلاه. على سبيل المثال:
استيراد java.util.date ؛ الفئة العامة datedemo {public static void main (string args []) {// instantiate تاريخ كائن التاريخ = تاريخ جديد () ؛ // عرض System.out.printf ("٪ S ٪ TB ٪ <te ، ٪ <ty" ، "تاريخ الاستحقاق:" ، التاريخ) ؛ }}هذا سوف ينتج عنه النتائج التالية:
تاريخ الاستحقاق: 09 فبراير 2004
أحرف تحويل التاريخ والوقت
| شخصية | يصف | مثال |
|---|---|---|
| ج | التاريخ والوقت الكامل | الاثنين مايو 04 09:51:52 CDT 2009 |
| و | ISO 8601 التاريخ | 2004-02-09 |
| د | وقت تنسيق الولايات المتحدة (شهر/يوم/سنة) | 02/09/2004 |
| ر | نظام 24 مرة | 18:05:19 |
| ص | نظام 12 مرة | 06:05:19 مساءً |
| ص | نظام 24 مرة ، لا ثاني | 18:05 |
| ذ | عام من أربعة أرقام (باستخدام عمود الصف الأول الصفر) | 2004 |
| ذ | آخر رقمين من العام (باستخدام عمود الصف الأول الصفر) | 04 |
| ج | أول رقمين من العام (باستخدام عمود الصف الأول الصفر) | 20 |
| ب | اسم شهر كامل | فبراير |
| ب | اسم شهر الاختصار | فبراير |
| م | شهرين من رقمين (باستخدام عمود الصف الأول صفر) | 02 |
| د | تاريخ مكون من رقمين (باستخدام عمود الصف الصفر الأول) | 03 |
| ه | تاريخ رقم مزدوج (لا يوجد عمود صفر إلى الأمام) | 9 |
| أ | اسم الأسبوع الكامل | الاثنين |
| أ | اختصار اسم الأسبوع | الاثنين |
| ي | ثلاثة أرقام في منتصف العام (باستخدام عمود الصف الصفر الأول) | 069 |
| ح | ساعتين مكون من رقمين (باستخدام عمود الصف الصفر الأول) ، بين 00 و 23 | 18 |
| ك | ساعتين من رقمين (لا يوجد عمود صفر للأمام) ، بين 0 و 23 | 18 |
| أنا | ساعتين مكون من رقمين (باستخدام عمود الصف الصفر الأول) ، بين 01 و 12 | 06 |
| ل | ساعتين من رقمين (لا يوجد عمود صفر للأمام) ، بين 1 و 12 | 6 |
| م | دقائق من رقمين (استخدم عمود الصف الأول صفر) | 05 |
| ق | ثانيتين من رقمين (استخدم عمود الصف الأول صفر) | 19 |
| ل | ثلاثة أرقام ميلي ثانية (باستخدام عمود الصف الأول صفر) | 047 |
| ن | تسعة أرقام نانو ثانية (باستخدام عمود الصف الأول صفر) | 047000000 |
| ص | علامة الرسملة بعد الظهر | مساءً |
| ص | علامة بعد الظهر الصغيرة | مساءً |
| ض | RFC 822 إزاحة من رقم GMT | -0800 |
| ض | المنطقة الزمنية | PST |
| ق | ثواني من 1970-01-01 00:00:00 بتوقيت جرينتش | 1078884319 |
| س | GMT من 1970-01-01 00:00:00 | 1078884319047 |
تاريخ تحويل السلسلة
تحتوي فئة SimpleDateFormat على بعض الطرق الإضافية ، مثل Parse () ، والتي تحاول تحويل سلسلة استنادًا إلى تنسيق الكائن المخزن في تبسيط معين. على سبيل المثال:
استيراد java.util.*؛ استيراد java.text.*؛ الفئة العامة datedemo {public static void main (string args []) {simpledateformat ft = new SimpledAteFormat ("Yyyy-MM-DD") ؛ إدخال السلسلة = args.length == 0؟ "1818-11-11": args [0] ؛ system.out.print (input + "parses as") ؛ تاريخ ر ؛ حاول {t = ft.parse (input) ؛ system.out.println (t) ؛ } catch (parseException e) {system.out.println ("غير قابل للشفاء باستخدام" + ft) ؛ }}}سيؤدي المثال الجري للبرنامج أعلاه إلى إنتاج النتائج التالية:
$ java datedemo1818-11-11 أهم ما في الأربعاء في 11 نوفمبر 11 00:00:00 بتوقيت جرينتش 1818 $ جافا datedemo 2007-12-012007-12-01.
النوم لفترة من الوقت
يمكنك أداء أي وقت أثناء السبات من مللي ثانية إلى دورة حياة الكمبيوتر بأكملها. على سبيل المثال ، سينام البرنامج التالي لمدة 10 ثوانٍ:
استيراد java.util.*؛ الطبقة العامة SleepDemo {public static void main (string args []) {try {system.out.println (new date () + "/n") ؛ thread.sleep (5*60*10) ؛ System.out.println (Date () + "/n") ؛ } catch (استثناء e) {system.out.println ("حصلت على استثناء!") ؛ }}}هذا سوف ينتج عنه النتائج التالية:
الشمس 03 مايو 18:04:41 GMT 2009SUN 03 مايو 18:04:51 بتوقيت جرينتش 2009
قياس وقت التنفيذ
في بعض الأحيان ، قد تكون النقاط الزمنية التي قد يتم قياسها بالمللي ثانية. لذلك ، دعنا نعيد كتابة المثال أعلاه مرة أخرى:
استيراد java.util.*؛ الطبقة العامة diffdemo {public static void main (string args []) {try {long start = system.currentTimeMillis () ؛ System.out.println (Date () + "/n") ؛ thread.sleep (5*60*10) ؛ System.out.println (Date () + "/n") ؛ End Long = System.CurrentTimeMillis () ؛ diff طويل = نهاية - ابدأ ؛ system.out.println ("الفرق هو:" + diff) ؛ } catch (استثناء e) {system.out.println ("حصلت على استثناء!") ؛ }}}هذا سوف ينتج عنه النتائج التالية:
الأحد 03 مايو 18:16:51 GMT 2009SUN 03 May 18:16:57 GMT 2009Difference IS: 5993
فئة Gregoriancalendar
Gregoriancalendar هو تنفيذ ملموس لفئة التقويم ، أي تنفيذ غريغوريان الغريغوري العادي الذي تعرفه. لم تتم مناقشة فئة التقويم في هذا البرنامج التعليمي ، يمكنك الاطلاع على وثائق Java القياسية.
تقوم طريقة GetInstance () Calendar بإرجاع سيارة GregorianCalendar التي تم تهيئتها مع تحديد الموقع الافتراضي والوقت والوقت الحاليين والمنطقة الزمنية. يتم تعريف حقلين في غريغوريانكالندر: م و قبل الميلاد. هذه تمثل اثنين من العصور المحددة في التقويم الغريغوري.
هناك أيضًا العديد من مُنشئات GregorianCalendar:
| Sn | وصف مُنشئ |
|---|---|
| 1 | غريغوريانكالندار () قم ببناء GregorianCalendar الافتراضي باستخدام الوقت الحالي في المنطقة الزمنية الافتراضية مع اللغة الافتراضية. |
| 2 | Gregoriancalendar (int year ، int month ، int date) اضبط اللغة الافتراضية في المنطقة الزمنية الافتراضية لبناء GregorianCalendar مع التاريخ المحدد |
| 3 | Gregoriancalendar (int year ، int month ، int date ، int hour ، int minute) يقوم بإنشاء GregorianCalendar مع تاريخ ووقت معينين على المنطقة الزمنية الافتراضية مع اللغة الافتراضية. |
| 4 | Gregoriancalendar (int year ، int month ، int date ، int hour ، int minute ، int second) قم ببناء غريغوريانكالندار مع تاريخ ووقت معينين على المنطقة الزمنية الافتراضية مع اللغة الافتراضية |
| 5 | Gregoriancalendar (ALOCALE) قم ببناء GregorianCalendar استنادًا إلى الوقت الحالي والمنطقة الزمنية الافتراضية للموقع المحدد. |
| 6 | غريغوريانكالندار (منطقة المنطقة الزمنية) استنادًا إلى الوقت الحالي ، تم تصميم gregoriancalendar في منطقة زمنية معينة باستخدام اللغة الافتراضية. |
| 7 | Gregoriancalendar (منطقة الزمن ، ALOCALE) تم تصميم GregorianCalendar بناءً على الوقت الحالي والمنطقة الزمنية المحددة للموقع المحدد. |
| Sn | الطرق والأوصاف |
|---|---|
| 1 | إضافة باطلة (حقل int ، مبلغ int) تضيف القاعدة المستندة إلى التقويم مبلغًا محددًا (موقّعًا) من الوقت إلى حقل الوقت المحدد. |
| 2 | محمية الفراغ المحمية computefields () تحويل UTC إلى قيمة حقل الوقت millisecond. |
| 3 | محميات الفراغ المحمية () الكتابة فوق المللي ثانية التي يحول فيها التقويم قيمة المجال الزمني UTC. |
| 4 | منطقية متساوية (كائن OBJ) تتم مقارنة هذا gregoriancalendar مع مرجع كائن. |
| 5 | int get (int field) يحصل على قيمة مجال الوقت المحدد. |
| 6 | int getActualMaximum (Int Field) إرجاع أقصى قيمة ممكنة للحقل ، المقدم إلى التاريخ الحالي. |
| 7 | int getActualMinimum (Int Field) إرجاع القيمة الدنيا التي قد يكون لها الحقل ، بالنظر إلى التاريخ الحالي. |
| 8 | int getGreatestMinimum (Int Field) إرجاع القيمة العالية والأقل (إذا كان هناك تغيير) للحقل المحدد. |
| 9 | تاريخ getGreiNchange () احصل على تاريخ التغيير في التقويم الغريغوري. |
| 10 | int getLeastMaximum (Int Field) إرجاع أدنى قيمة الحد الأقصى للحقل المحدد ، إذا كان هناك تغيير. |
| 11 | int getMaximum (Int Field) إرجاع القيمة القصوى في الحقل المحدد. |
| 12 | تاريخ getTime () احصل على الوقت الحالي للتقويم. |
| 13 | طويل getTimeInmillis () الوقت الحالي للحصول على التقويم. |
| 14 | Timezone GetTimeZone () احصل على المنطقة الزمنية. |
| 15 | int getMinimum (Int Field) إرجاع الحد الأدنى للقيمة في الحقل المحدد. |
| 16 | int hashcode () أعد كتابة Hashcode. |
| 17 | منطقية Isleapyear (int year) تحدد أن سنة معينة هي سنة قفزة. |
| 18 | لفة باطلة (Int Field ، Boolean Up) أضف أو طرح الوقت (لأعلى/لأسفل) (لأعلى/لأسفل) وحدة في حقل الوقت المحدد ، دون تغيير الحقل الأكبر. |
| 19 | مجموعة باطلة (حقل int ، قيمة int) يحدد حقل الوقت مع القيمة المحددة. |
| 20 | مجموعة باطلة (int year ، int month ، int date) تم تعيينه على قيمة السنة والشهر واليوم. |
| واحد وعشرون | مجموعة void (int year ، montr ، int date ، int hour ، int minute) تم تعيينه على قيم السنة والشهر واليوم والساعة والدقيقة. |
| إثنان وعشرون | مجموعة void (int year ، int month ، int date ، int hour ، int minute ، int second) تم تعيينه على قيمة السنة والشهر واليوم والساعة والدقيقة والثانية من الحقل. |
| ثلاثة وعشرين | void setgregorianchange (تاريخ التاريخ) حدد تاريخ تغيير الغريغوريانكالندر. |
| أربعة وعشرون | باطلة settime (تاريخ التاريخ) يحدد الوقت الحالي والتاريخ المحدد للتقويم. |
| 25 | void setTimeInmillis (Millis Long) اضبط الوقت الحالي للتقويم من القيمة الطويلة المحددة. |
| 26 | void settimezone (قيمة المنطقة الزمنية) يحدد المنطقة الزمنية مع قيمة المنطقة الزمنية المحددة. |
| 27 | سلسلة tostring () إرجاع تمثيل السلسلة لهذا التقويم. |
استيراد java.util.*؛ الطبقة العامة gregoriancalendardemo {public static void main (string args []) {String inters [] = {"Jan" ، "Feber" ، "Mar" ، "APR" ، "May" ، "Jun" ، "Jul" ، "Aug" ، "Sep" ، "Oct" ، "Nov" ، "DEC"} ؛ سنة // قم بإنشاء GregorianCalendar تهيئته // مع التاريخ والوقت الحاليين في اللغة الافتراضية والمنطقة الافتراضية. gregoriancalendar gcalendar = gregoriancalendar () جديد ؛ // عرض معلومات الوقت والتاريخ الحاليين. System.out.print ("التاريخ:") ؛ system.out.print (أشهر [gcalendar.get (calendar.mon)]) ؛ System.out.print ("" + gcalendar.get (calendar.date) + "") ؛ system.out.println (year = gcalendar.get (calendar.year)) ؛ System.out.print ("الوقت:") ؛ system.out.print (gcalendar.get (calendar.hour) + ":") ؛ system.out.println (gcalendar.get (calendar.minute) + ":") ؛ system.out.println (gcalendar.get (calendar.second)) ؛ // اختبار إذا كانت السنة الحالية هي سنة قفزة إذا (gcalendar.isleapyear (السنة)) {system.out.println ("السنة الحالية هي سنة قفزة") ؛ } آخر {system.out.println ("السنة الحالية ليست سنة قفزة") ؛ }}}هذا سوف ينتج عنه النتائج التالية:
التاريخ: 22 أبريل 2009 الوقت: 11: 25: 27 ، السنة الحالية ليست سنة قفزة
تطبيق التقويم
دعنا نلقي نظرة على تطبيق تقويمي. هنا نستخدم بنية MVC التقليدية لتصميم ثلاث فئات: CalendarViewer و CalendarController و CalendArmodel.
CalendarViewer.java يعالج واجهة المستخدم بشكل أساسي ، ويستخدم الكود الحالي ، ويقوم بتنظيمه ويستخرج منطق الأعمال ، بحيث يركز على معالجة طبقة العرض.
CalendarViewer.java
يمتد التقويم العام للطبقة العامة jwindow الأدوات actionListener {jpanel calendarympanel = null ؛ Jbutton LeftButton = New Jbutton ("<<") ؛ jbutton rightbutton = new jbutton (">>") ؛ label yearlabel = new label () ؛ label monthlabel = new label () ؛ label passedDaySlabel = new label () ؛ jpanel calendarwdpanel = null ؛ // هي هيئة التضمين الكلية لـ Calendar_Week و Calendar_Days jpanel calendarweekpanel = null ؛ // تخطيط للأعمدة الأسبوعية jpanel calendardayspanel = null ؛ // تخطيط الأعمدة jpanelaxitpanel = null ؛ jbutton quitbutton = new jbutton ("Close") ؛ Border FrankBorder = BorderFactory.CreateMembtyBorder () ؛ CalendarController cController = New CalendarController () ؛ التقويم العام () {super () ؛ buildui () ؛ } public void buildui () {buildtoppanel () ؛ BuildCenerPanel () ؛ BuildBottompanel () ؛ setLayout (New BorderLayout ()) ؛ . . . . . . } private void buildtoppanel () {. . . . . . } private void BuildCenerPanel () {. . . . . . } private void buildBottompanel () {. . . . . . } jpanel updatedayspanel () {. . . . . . } public void updatePassedDaysLabel () {. . . . . . } public void actionperformed (actionevent e) {. . . . . . } public static void main (string [] args) {swingutability.invokelater (new RunNable () {public void run () {new CalendarViewer () ؛}}) ؛ }}يتم تقسيم بنية واجهة المستخدم بشكل أساسي إلى 3 كتل ، المقابلة للألواح الثلاثة في الشكل العلوي والمتوسط والسفلي.
يتم الانتهاء من معالجة الاستماع الحدث بالطريقة التالية.
يتم تحديث واجهة المستخدم المستند إلى الحدث بواسطة الطريقتين التاليتين.
updatedayspanel () ؛ updatePassedDaysLabel () ؛ CalendarController.java يتعامل بشكل أساسي مع منطق الأعمال المحدد ، في حين يتم تسليم بعض منطق خوارزمية التقويم المستخدمة غير المرتبطة بالتطبيق المحدد إلى CalendArmodel.java. CalendArmodel.Javapublic Class Calendarmodel {private int daytab [] = {{0 ، 31 ، 28 ، 31 ، 30 ، 31 ، 30 ، 31 ، 31 ، 31 ، 30 ، 31 ، 30 ، 31} ، {0 ، 31 ، 29 ، 31 ، 30 ، 31 ، 31 ، 30 ، 31}} ؛ Boolean Public Isleapyear (int year) {return ((year ٪ 4 == 0 && year ٪ 100! = 0) || year ٪ 400 == 0) ؛ } public int dayofyear (int day ، int month ، int year) {int leap = isLeapyear (year)؟ 1: 0 ؛ لـ (int i = 1 ؛ i <month ؛ i ++) day+= daytab [Leap] [i] ؛ يوم العودة } int daysofmonth (int month ، int year) {int leap = isLeapyear (year)؟ 1: 0 ؛ Return Daytab [Leap] [month] ؛ } public int dayofweek (int day ، int month ، int year) {if (month == 1) {month = 13 ؛ سنة--؛ } if (month == 2) {month = 14 ؛ سنة--؛ } العائد (اليوم + 2 * الشهر + 3 * (الشهر + 1) / 5 + السنة + السنة / 4 - السنة / 100 + سنة / 400) ٪ 7 + 1 ؛ }}قم بإنشاء صفيف ثنائي الأبعاد يمثل عدد الأيام شهريًا لسنوات قفزة وسنوات غير قادة على التوالي. الطرق الرئيسية هي:
صيغة حساب كيم لارسون