الاثنين، 16 ديسمبر 2019

التعامل مع الوقت والتاريخ في برمجة جافا Java Date and Time

التعامل مع الوقت والتاريخ في برمجة جافا 

Java Date and Time


التعامل مع الوقت والتاريخ في برمجة جافا Java Date and Time

يوفر Java فئة التاريخ المتاحة في حزمة java.util ، هذه الفئة تتضمن التاريخ والوقت الحاليين.

 تدعم فئة التاريخ منشأين كما هو موضح في الجدول التالي.
الرقم.النشيد والوصف 
1
Date( )
يقوم المنشئ بتهيئة الكائن بالتاريخ والوقت الحاليين.
2
Date(long millisec)
يقبل هذا المُنشئ وسيطة تساوي عدد المللي ثانية التي انقضت منذ منتصف ليل 1 يناير 1970.
فيما يلي دوال  فئة التاريخ.
الرقم.الدالة والوصف
1
boolean after(Date date)
إرجاع صحيح إذا احتوى كائن تاريخ الاستدعاء على تاريخ يتجاوز التاريخ المحدد بالتاريخ ، وإلا فإنه سيعود خطأ.

2
boolean before(Date date)
إرجاع صحيح إذا احتوى كائن تاريخ الاستدعاء على تاريخ أقدم من التاريخ المحدد بالتاريخ ، وإلا فإنه سيعود خطأ.
3
Object clone( )
يكرر كائن تاريخ الاستدعاء.
4
int compareTo(Date date)
يقارن قيمة كائن الاستدعاء بقيمة التاريخ.  إرجاع 0 إذا كانت القيم متساوية.  تُرجع قيمة سالبة إذا كان كائن الاستدعاء أقدم من التاريخ.  تُرجع قيمة موجبة إذا كان كائن الاستدعاء متأخراً عن التاريخ.
5
int compareTo(Object obj)
يعمل بشكل مماثل للمقارنة (التاريخ) إذا كان obj من فئة التاريخ.  خلاف ذلك ، فإنه يلقي ClassCastException.
6
boolean equals(Object date)
إرجاع صحيح إذا احتوى كائن تاريخ الاستدعاء على نفس الوقت والتاريخ كما هو محدد بواسطة التاريخ ، وإلا فإنه سيعود خطأ.
7
long getTime( )
يُرجع عدد المللي ثانية التي انقضت منذ 1 يناير 1970.
8
int hashCode( )
إرجاع كود  تجزئة لكائن الاستدعاء.
9
void setTime(long time)
يضبط الوقت والتاريخ كما هو محدد بواسطة الوقت ، والذي يمثل وقتًا منقضيًا بالميلي ثانية من منتصف ليل 1 يناير 1970.
10
String toString( )
يحول كائن تاريخ الاستدعاء إلى سلسلة ويعيد النتيجة.

الحصول على تاريخ ووقت الحالي Getting Current Date and Time

هذه طريقة سهلة للغاية للحصول على التاريخ والوقت الحاليين في Java.  يمكنك استخدام كائن Date بسيط باستخدام طريقة toString () لطباعة التاريخ والوقت الحاليين كما يلي -

مثال Example


import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date using toString()
      System.out.println(date.toString());
   }
}
المخرجات
on May 04 09:51:52 CDT 2009

مقارنة التاريخ Date Comparison

فيما يلي الطرق الثلاث لمقارنة تاريخين -

 يمكنك استخدام getTime () للحصول على عدد المللي ثانية المنقضية منذ منتصف ليل 1 يناير 1970 لكلا الكائنين ثم مقارنة هاتين القيمتين.

 يمكنك استخدام الأساليب قبل () ، وبعد () ، ويساوي ().  لأن الثاني عشر من الشهر يأتي قبل الثامن عشر ، على سبيل المثال ، التاريخ الجديد (99 ، 2 ، 12). قبل (التاريخ الجديد (99 ، 2 ، 18)) يعود صحيحاً.

 يمكنك استخدام أسلوب comparTo () ، والذي يتم تعريفه بواسطة واجهة قابلة للمقارنة ويتم تنفيذه بواسطة التاريخ.

تنسيق التاريخ مثال بسيط Date Formatting Using SimpleDateFormat

مثال Example


import java.util.*;
import java.text.*;

public class DateDemo {

   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}
Current Date: Sun 2004.07.18 at 04:14:09 PM
لتحديد تنسيق الوقت ، استخدم سلسلة نمط الوقت.  في هذا النمط ، يتم حجز جميع أحرف ASCII كأحرف نقش ، والتي يتم تعريفها على النحو التالي -
الرمزالوصفمثال
GEra designator التاريخ قبل الميلاد او بعدAD
yYear in four digits السنة بالأرقام 2001
MMonth in year الشهر في السنةJuly or 07
dDay in month اليوم في الشهر10
hHour in A.M./P.M. (1~12) الساعة بتنسيق ١٣ صباح او مساء12
HHour in day (0~23) الساعة في اليوم بتنسيق ٢٤22
mMinute in hour الدقائق في الساعة30
sSecond in minuteثانية55
SMillisecond ملي ثانية234
EDay in week اليوم في الاسبوعTuesday
DDay in year اليوم في السنة360
FDay of week in month اليوم الاسبوع في الشهر2 (second Wed. in July)
wWeek in year الاسبوع في السنة 40
WWeek in month الأسابيع في الشهر 1
aA.M./P.M. marker علامة الصباح او المساءPM
kHour in day (1~24)الساعات بتنسيق ٢٤24
KHour in A.M./P.M. (0~11) الساعات بتنسيق الصباح او المساء10
z وقت  المنطقة Time zoneEastern Standard Time
'الهروب للنصDelimiter
"اقتباس واحد`

تنسيق التاريخ باستخدام Date Formatting Using printf

يمكن إجراء تنسيق التاريخ والوقت بسهولة بالغة باستخدام طريقة printf.  يمكنك استخدام تنسيق مؤلف من حرفين ، يبدأ بـ t وينتهي بأحد أحرف الجدول كما هو موضح في التعليمة البرمجية التالية.

مثال Example


import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date
      String str = String.format("Current Date/Time : %tc", date );

      System.out.printf(str);
   }
}

المخرجات
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
سيكون سخيفا بعض الشيء إذا كان لديك لتوفير التاريخ

 عدة مرات لتنسيق كل جزء.  لهذا السبب ، يمكن أن تشير سلسلة التنسيق إلى فهرس الوسيطة المراد تنسيقها.

 يجب أن يتبع الفهرس النسبة المئوية على الفور ويجب أن يتم إنهائه بـ $.

مثال Example


import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display time and date
      System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}
المخرجات
Due date: February 09, 2004
بدلاً من ذلك ، يمكنك استخدام العلامة <.  يشير إلى أنه يجب استخدام الوسيطة نفسها كما في مواصفات التنسيق السابق مرة أخرى.

مثال Example


import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display formatted date
      System.out.printf("%s %tB %, "Due date:", date);
   }
}
المخرجات
Due date: February 09, 2004

أحرف تحويل التاريخ والوقت

الحرفالوصف مثال
cالتاريخ والوقت الكاملMon May 04 09:51:52 CDT 2009
Fتاريخ الايزو 86012004-02-09
Dالولايات المتحدة  تاريخ التنسيق (شهر / يوم / سنة)02/09/2004
Tوقت 24 ساعة18:05:19
rوقت 12 ساعة06:05:19 pm
R24 ساعة الوقت ، لا ثواني18:05
Yأربعة أرقام السنة (مع الأصفار الرائدة)2004
yآخر رقمين من السنة (مع الأصفار البادئة)04
Cأول رقمين من السنة (مع الأصفار الرائدة)20
Bاسم الشهر الكاملFebruary
bاسم الشهر المختصرFeb
mشهر من رقمين (مع الأصفار الرائدة)02
dيوم من رقمين (مع الأصفار الرائدة)03
eيوم مكون من رقمين (بدون الأصفار البادئة)9
Aاسم أيام الأسبوع الكاملMonday
aاختصار اسم أيام الأسبوعMon
jيوم من ثلاثة أرقام من السنة (مع الأصفار الرائدة)069
Hساعة من رقمين (مع الأصفار البادئة) ، بين 00 و 2318
kساعة مكونة من رقمين (بدون الأصفار البادئة) ، بين 0 و 2318
Iساعة من رقمين (مع الأصفار البادئة) ، بين 01 و 1206
lساعة مكونة من رقمين (بدون الأصفار البادئة) ، بين 1 و 126
Mدقائق من رقمين (مع الأصفار البادئة)05
Sثواني من رقمين (مع الأصفار البادئة)19
Lمللي ثانية مكونة من ثلاثة أرقام (مع الأصفار البادئة)047
Nتسعة نانوثانية رقمية (مع الأصفار الرائدة)047000000
Pعلامة الصباح أو الظهر الكبيرةPM
pصغيرة الصباح أو بعد الظهر علامةpm
zRFC 822 إزاحة رقمية من GMT-0800
ZTime zonePST
sثانية منذ
 1970-01-01 00:00:00 GMT
1078884319
Qميلي ثانية منذ
1970-01-01 00:00:00 GMT
1078884319047
هناك فئات أخرى مفيدة تتعلق بالتاريخ والوقت.  لمزيد من التفاصيل ، يمكنك الرجوع إلى وثائق Java Standard.

تحويل  النصوص التاريخية  إلى بيانات من نوع  التواريخ Parsing Strings into Dates

لدى فئة SimpleDateFormat بعض الدوال الإضافية ، ولا سيما تحليل () الذي يحاول تحليل سلسلة وفقًا للتنسيق المخزن في كائن SimpleDateFormat المحدد.

مثال Example


import java.util.*;
import java.text.*;
  
public class DateDemo {

   public static void main(String args[]) {
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 
      String input = args.length == 0 ? "1818-11-11" : args[0]; 

      System.out.print(input + " Parses as "); 
      Date t;
      try {
         t = ft.parse(input); 
         System.out.println(t); 
      } catch (ParseException e) { 
         System.out.println("Unparseable using " + ft); 
      }
   }
}


يؤدي تشغيل عينة من البرنامج أعلاه إلى النتيجة التالية -

المخرجات 

1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818

النوم لبرهة من الوقت Sleeping for a While

يمكنك النوم لأي فترة زمنية من مللي ثانية واحدة إلى عمر جهاز الكمبيوتر الخاص بك.  على سبيل المثال ، ينام البرنامج التالي لمدة 3 ثوانٍ -

مثال Example


import java.util.*;
public class SleepDemo {

   public static void main(String args[]) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(5*60*10); 
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) {
         System.out.println("Got an exception!"); 
      }
   }
}
المخرجات 
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

قياس الوقت المنقضي Measuring Elapsed Time

في بعض الأحيان ، قد تحتاج إلى قياس نقطة زمنية بالمللي ثانية.  لذلك دعونا نعيد كتابة المثال أعلاه مرة أخرى -

مثال Example


import java.util.*;
public class DiffDemo {

   public static void main(String args[]) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         
         Thread.sleep(5*60*10);
         System.out.println(new Date( ) + "\n");
         
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
      } catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}
المخرجات
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

فئة تقويم المنطقة الجغرافية GregorianCalendar Class

GregorianCalendar هو تطبيق ملموس لفئة التقويم التي تنفذ التقويم الغريغوري العادي الذي تعرفه.  لم نناقش فئة التقويم في هذا البرنامج التعليمي ، يمكنك البحث عن وثائق Java القياسية لهذا الغرض.

 إرجاع الأسلوب getInstance () التقويم GregorianCalendar تهيئة مع التاريخ والوقت الحالي في الإعدادات المحلية الافتراضية والمنطقة الزمنية.  يحدد GregorianCalendar حقلين: AD و BC.  يمثل هذان العهدين المحددان بواسطة التقويم الغريغوري.

 هناك أيضًا العديد من مُنشئات كائنات GregorianCalendar -
الرقم.المشيد والشرح
1
GregorianCalendar()
تكوين 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)
ينشئ GregorianCalendar مع التاريخ والوقت المعينين للمنطقة الزمنية الافتراضية مع الإعدادات المحلية الافتراضية.
5
GregorianCalendar(Locale aLocale)
ينشئ GregorianCalendar استنادًا إلى الوقت الحالي في المنطقة الزمنية الافتراضية باستخدام الإعدادات المحلية المحددة.
6
GregorianCalendar(TimeZone zone)
يقوم بإنشاء GregorianCalendar استنادًا إلى الوقت الحالي في المنطقة الزمنية المحددة باستخدام الإعدادات المحلية الافتراضية.
7
GregorianCalendar(TimeZone zone, Locale aLocale)
ينشئ GregorianCalendar استنادًا إلى الوقت الحالي في المنطقة الزمنية المحددة باستخدام الإعدادات المحلية المحددة.
فيما يلي قائمة ببعض طرق الدعم المفيدة التي توفرها فئة GregorianCalendar -
الرقمالدالة والوصف
1
void add(int field, int amount)
يضيف مقدار الوقت (الموقَّع) المحدد إلى حقل الوقت المحدد ، وفقًا لقواعد التقويم.
2
protected void computeFields()
.يحول UTC كمللي ثانية إلى قيم حقول الوقت
3
protected void computeTime()
Overrides Calendar يحول قيم حقل الوقت إلى UTC كـ مللي ثانية.
4
boolean equals(Object obj)
يقارن هذا GregorianCalendar بمرجع كائن.
5
int get(int field)
الحصول على القيمة لحقل وقت معين.
6
int getActualMaximum(int field)
إرجاع الحد الأقصى للقيمة التي يمكن أن يتمتع بها هذا الحقل ، بالنظر إلى التاريخ الحالي.
7
int getActualMinimum(int field)
يُرجع الحد الأدنى للقيمة التي يمكن أن يتمتع بها هذا الحقل ، بالنظر إلى التاريخ الحالي.
8
int getGreatestMinimum(int field)
يُرجع أعلى قيمة دنيا للحقل المحدد في حالة اختلافه.
9
Date getGregorianChange()
الحصول على تاريخ تغيير التقويم الغريغوري.
10
int getLeastMaximum(int field)
لإرجاع أقل قيمة قصوى للحقل المحدد في حالة اختلافه.
11
int getMaximum(int field)
إرجاع الحد الأقصى لقيمة الحقل المحدد.
12
Date getTime()
الحصول على الوقت الحالي لهذا التقويم.
13
long getTimeInMillis()
الحصول على الوقت الحالي لهذا التقويم كوقت طويل.
14
TimeZone getTimeZone()
الحصول على المنطقة الزمنية.
15
int getMinimum(int field)
إرجاع الحد الأدنى لقيمة الحقل المحدد.
16
int hashCode()
يتجاوز hashCode.
17
boolean isLeapYear(int year)
يحدد ما إذا كانت سنة معينة سنة كبيسة.
18
void roll(int field, boolean up)
يضيف أو يطرح (أعلى / أسفل) وحدة واحدة من الوقت في حقل الوقت المحدد دون تغيير الحقول الكبيرة.
19
void set(int field, int value)
يضبط مجال الوقت بالقيمة المحددة.
20
void set(int year, int month, int date)
يضبط قيم الحقول السنة والشهر والتاريخ.
21
void set(int year, int month, int date, int hour, int minute)
يضبط قيم الحقول السنة والشهر والتاريخ
 والساعة والدقيقة.
22
void set(int year, int month, int date, int hour, int minute, int second)
يضبط قيم الحقول السنة والشهر والتاريخ والساعة والدقيقة والثانية.
23
void setGregorianChange(Date date)
يعين تاريخ التغيير GregorianCalendar.
24
void setTime(Date date)
يضبط الوقت الحالي لهذا التقويم مع التاريخ المحدد.
25
void setTimeInMillis(long millis)
يضبط الوقت الحالي للتقويم من القيمة الطويلة المحددة.
26
void setTimeZone(TimeZone value)
يضبط المنطقة الزمنية مع قيمة المنطقة الزمنية المحددة.
27
String toString()
إرجاع متغير نصي مماثل لهذا التقويم.

مثال Example


import java.util.*;
public class GregorianCalendarDemo {

   public static void main(String args[]) {
      String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
         "Oct", "Nov", "Dec"};
      
      int year;
      // Create a Gregorian calendar initialized
      // with the current date and time in the
      // default locale and timezone.
      
      GregorianCalendar gcalendar = new GregorianCalendar();
      
      // Display current time and date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));

      // Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)) {
         System.out.println("The current year is a leap year");
      }else {
         System.out.println("The current year is not a leap year");
      }
   }
}
المخرجات
Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year
للحصول على قائمة كاملة بالثابت المتوفرة في فئة التقويم ، يمكنك الرجوع إلى وثائق Java القياسية.





التسميات: