معرفة التاريخ و الوقت الحالي
معرفة التاريخ و الوقت الحالي سهلة جداً في جافا. كل ما عليك فعله هو إنشاء كائن من الكلاس Date, ثم عرض قيمة هذا الكائن.مثال
import java.util.Date;
public class Main {
public static void main(String[] args) {
// date هنا قمنا بإنشاء تاريخ و وضعناه في الكائن
Date date = new Date();
// date هنا قمنا بعرض التاريخ الذي تم تخزينه في الكائن
System.out.println( date );
}
}
•نتيجة التنفيذ :
Sun Sep 30 13:24:32 EET 2018
الكلاس Date
الكلاس Date هو كلاس جاهز في جافا يستخدم لمعرفة التاريخ و الوقت. و يحتوي على عدة دوال للتعامل مع الوقت سواء لمقارنة وقت مع وقت أو لمعرفة وقت معين إلخ..الكلاس Date يحتوي على إثنين كونستركتور ذكرناهما في الجدول التالي.
| الكونستركتور | تعريفه |
|---|---|
| Date() | هذا الكونستركتور يمهد الكائن الذي قام باستدعائه, بالوقت الحالي. |
| Date(long millisec) | هذا الكونستركتور يستخدم لتمهيد الكائن الذي يمثل الوقت بعدد بالـ milliseconds ( أي كل ثانية واحدة تساوي 1000 ). العدد الذي نضعه يمثل عدد الـ milliseconds الذي سيضاف على هذا التاريخ 1/1/1970 00:00:00 GMT أي إذا وضعت 0 ستحصل على هذا التاريخ كما هو. و إذا وضعت 1000 ستضيف ثانية على هذا التاريخ. و إذا وضعت 2000 ستضيف ثانيتين على هذا التاريخ و هكذا. |
public class Main {
public static void main(String[] args) {
// هنا قمنا بتخزين الوقت الحالي للجهاز
Date currentDate = new Date();
System.out.println( "Current Date: " + currentDate );
// هنا أضفنا 5 ثواني على التاريخ 00:00:00 1/1/1970
Date specialDate = new Date(5000);
System.out.println( "Special Date: " + specialDate );
}
}
•نتيجة التنفيذ :
Current Date: Sun Sep 30 12:24:14 EET 2018
Special Date: Thu Jan 01 02:00:05 EET 1970
Special Date: Thu Jan 01 02:00:05 EET 1970
دوال الكلاس Date
| إسم الدالة | تعريفها |
|---|---|
| after() | ترجع true إذا كان كائن الـ Date الذي قام باستدعائها يحتوي على تاريخ أحدث من تاريخ الـ Date الذي نضعه كـ argument. |
| before() | ترجع true إذا كان كائن الـ Date الذي قام باستدعائها يحتوي على تاريخ أقدم من تاريخ الـ Date الذي نضعه كـ argument. |
| clone() | تنشئ نسخة ثانية من كائن الـ Date الذي قام باستدعائها. |
| compareTo() | تقارن كائن الـ Date الذي قام باستدعائها مع كائن الـ Date الذي نضعه كـ argument. |
| equals() | ترجع true إذا كان كائن الـ Date الذي قام باستدعائها يحتوي على نفس قيمة الكائن الذي نضعه كـ argument. |
| getTime() | ترجع عدد الـ milliseconds من تاريخ 1/1/1970 إلى تاريخ الوقت الذي تم به استدعاء هذه الدالة. |
| setTime() | تستخدم لتحديد الوقت إعتباراً من تاريخ 1/1/1970, العدد الذي نضعه يمثل عدد الثواني بالـ milliseconds. |
| hashCode() | ترجع hash لكائن الـ Date الذي قام باستدعائها. |
| toString() | تحول قيمة الـ Date لقيمة نوعها String و ترجعها. |
الامثلة التوضيحية لما سبق
after()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// هنا قمنا بإنشاء تاريخين
Date date1 = new Date(20000);
Date date2 = new Date(40000);
// date2 أحدث من تاريخ الـ date1 هنا سنفحص إذا كان تاريخ الـ
boolean check = date1.after(date2);
System.out.println( "date1 is after date2: " + check );// هنا قمنا بعرض نتيجة المقارنة
// date1 أحدث من تاريخ الـ date2 هنا سنفحص إذا كان تاريخ الـ
check = date2.after(date1);
System.out.println( "date2 is after date1: " + check );// هنا قمنا بعرض نتيجة المقارنة
}
}
•نتيجة التنفيذ
date1 is after date2: false
date2 is after date1: true
date2 is after date1: true
before()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// هنا قمنا بإنشاء تاريخين
Date date1 = new Date(20000);
Date date2 = new Date(40000);
// date2 أقدم من تاريخ الـ date1 هنا سنفحص إذا كان تاريخ الـ
boolean check = date1.before(date2);
System.out.println( "date1 is before date2: " + check );// هنا قمنا بعرض نتيجة المقارنة
// date1 أقدم من تاريخ الـ date2 هنا سنفحص إذا كان تاريخ الـ
check = date2.before(date1);
System.out.println( "date2 is before date1: " + check );// هنا قمنا بعرض نتيجة المقارنة
}
}
•نتيجة التنفيذ
date1 is before date2: true
date2 is before date1: false
date2 is before date1: false
clone()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// Date هنا قمنا بإنشاء كائن نوعه
Date date1 = new Date();
// هنا قمنا بإنشاء نسخة عنه
Object date2 = date1.clone();
System.out.println( "Original Date: " + date1 );// هنا قمنا بعرض الكائن الأصلي
System.out.println( "Cloned Date: " + date2 );// هنا قمنا بعرض النسخة من هذا الكائن
}
}
•نتيجة التنفيذ
Original Date: Sun Sep 30 12:37:08 EET 2018
Cloned Date: Sun Sep 30 12:37:08 EET 2018
Cloned Date: Sun Sep 30 12:37:08 EET 2018
compareTo()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// Date هنا قمنا بإنشاء ثلاث كائنات نوعهم
Date date1 = new Date(0);
Date date2 = new Date(5000);
Date date3 = date1;
int comparison1 = date1.compareTo(date2);// date2 مع date1 هنا قمنا بمقارنة
int comparison2 = date2.compareTo(date1);// date1 مع date2 هنا قمنا بمقارنة
int comparison3 = date1.compareTo(date3);// date1 مع date3 هنا قمنا بمقارنة
// هنا قمنا بعرض نتائج المقارنات الثلالثة
System.out.println( "Comparison1 result: " + comparison1 );
System.out.println( "Comparison2 result: " + comparison2 );
System.out.println( "Comparison3 result: " + comparison3 );
}
}
•نتيجة التنفيذ
Comparison1 result: -1
Comparison2 result: 1
Comparison3 result: 0
Comparison2 result: 1
Comparison3 result: 0
equals()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// Date هنا قمنا بإنشاء ثلاثة كائنات نوعهم
Date date1 = new Date(0);
Date date2 = new Date(5000);
Date date3 = date1;
boolean check1 = date1.equals(date2);// date2 لا تساوي date1 لأن false هنا سترجع
boolean check2 = date1.equals(date3);// date3 تساوي date1 لأن true هنا سترجع
// هنا قمنا بعرض نتائج الإختبارات
System.out.println( "check1 result: " + check1 );
System.out.println( "check2 result: " + check2 );
}
}
•نتيجة التنفيذ
check1 result: false
check2 result: true
check2 result: true
getTime()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// هنا قمنا بإنشاء تاريخ
Date date = new Date();
// date هنا قمنا بتخزين عدد الثواني بين 1/1/1970 و بين التاريخ المخزن في
long secondsPassed = date.getTime();
// هنا قمنا بعرض عدد الثواني الموجود بين التاريخين
System.out.println( "The number of seconds from 1/1/1970 to " +date+ " is: " +secondsPassed );
}
}
•نتيجة التنفيذ
The number of seconds from 1/1/1970 to Sun Sep 30 12:41:01 EET 2018 is: 1538304061727
setTime()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// هنا قمنا بإنشاء تاريخ
Date date = new Date();
// هنا أضفنا 10 ثواني على التاريخ 1/1/1970
date.setTime(10000);
// هنا قمنا بعرض قيمة التاريخ
System.out.println( "Time after setting: " +date );
}
}
•نتيجة التنفيذ
Time after setting: Thu Jan 01 02:00:10 EET 1970
hashCode()
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date currentDate = new Date();// هنا قمنا بتخزين الوقت الحالي للجهاز
long hash = currentDate.toString().hashCode();// hashcode هنا قمنا بتحويل قيمة الوقت لنص ثم قمنا بتحويلها لـ
System.out.println( "Current Date: " + currentDate );// هنا قمنا بعرض الوقت الحالي
System.out.println( "Current Date in hashcode: " + hash );// للوقت الحالي hashcode هنا قمنا بعرض قيمة الـ
}
}
•نتيجة التنفيذ
Current Date: Sun Sep 30 12:45:12 EET 2018
Current Date in hashcode: -1289932029
Current Date in hashcode: -1289932029
toString()
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date currentDate = new Date();// هنا قمنا بتخزين الوقت الحالي للجهاز
String s = currentDate.toString();// s هنا قمنا بتخزين الوقت كنص في
System.out.println( "Current Date: " + s );// s هنا قمنا بعرض قيمة الـ
}
}
•نتيجة التنفيذ
Current Date: Sun Sep 30 12:46:41 EET 2018
الكلاس SimpleDateFormat
الكلاس SimpleDateFormat يستخدم للحصول على التاريخ و الوقت بالشكل الذي تريده, بمعنى أنه يسمح لك بتخصيص طريقة ظهور التاريخ و الوقت.يتم تحديد شكل التاريخ و الوقت في كونستركتور الـ SimpleDateFormat بواسطة الأحرف الأبجدية. هنا يقال لهذه الأحرف user-defind patterns.
عند تعاملك مع الكلاس SimpleDateFormat يمكنك إستخدام جميع الأحرف من a ? z و من A ? Z.
عندما تقوم بتحديد طريقة ظهور التاريخ و الوقت فأنت بذلك تقوم بتحديد الـ format للتاريخ و الوقت.
بمعنى آخر الأحرف التي تضعها في كونستركتور الـ SimpleDateFormat مع بعضها تشكل الـ format.
هذا الجدول يحتوي على جميع الأحرف المستخدمة لتحديد الـ format في الكلاس SimpleDateFormat.
| الحرف | إستخدامه | مثال |
|---|---|---|
| G | لإظهار عصر التسمية | AD |
| Y | لإظهار السنة, وتكون مؤلفة من أربع أرقام | 2005 |
| M | لإظهار رقم الشهر من السنة | 07 |
| d | لإظهار رقم اليوم من الشهر | 9 |
| h | لإظهار الساعة, بنظام 12 ساعة (1~12) A.M./P.M. | 12 |
| H | لإظهار الساعة في اليوم بنظام 24 ساعة (0~23) | 23 |
| m | لإظهار الدقائق في الساعة | 45 |
| s | لإظهار الثواني في الدقيقة | 36 |
| S | لإظهار الأجزاء في الثانية Millisecond | 458 |
| E | لإظهار إسم اليوم في الأسبوع | Saturday |
| D | لإظهار رقم اليوم في السنة | 360 |
| F | لإظهار عدد تكرار اليوم في الشهر | 3 (third Mon. in May) |
| w | لإظهار رقم الأسبوع في السنة | 34 |
| W | لإظهار رقم الأسبوع في الشهر | 1 |
| a | لإظهار إذا كان الوقت الآن A.M/P.M | AM |
| k | لإظهار الساعة في اليوم بنظام 24 ساعة (1~24) | 23 |
| K | لإظهار الساعة في اليوم بنظام 12 ساعة (0~11) | 9 |
| z | لإظهار المنطقة الزمنية | EET |
| ' | لإظهار أي نص | Current Date |
مثال
•سنقوم الآن بإنشاء format جديدة لعرض الوقت.
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// date هنا قمنا بإنشاء تاريخ و وضعناه في الكائن
Date date = new Date();
// جديدة لإظهار الوقت format هنا قمنا بإنشاء
SimpleDateFormat sdf = new SimpleDateFormat("'Current Date:' dd/MM/yy \n'Current Time:' hh:mm:ss a");
// ثم قمنا بعرض النتيجة format من خلال الدالة date على الـ format هنا قمنا بتطبيق الـ
System.out.println( sdf.format(date) );
}
}
•نتيجة التنفيذ
Current Date: 30/09/18
Current Time: 12:53:59 PM
Current Time: 12:53:59 PM
من خلال الجدول السابق يمكنك معرفة أن الكلاس Date يستخدم إفتراضياً الـ format التالية لعرض التاريخ و الوقت: E MMM d hh:mm:ss zzz Y
مثال
•سنقوم الآن بعرض التاريخ مرتين,الأولى بدون هذه الـ format, و الثانية مع هذه الـ format و لاحظ كيف سنحصل على نفس النتيجة.
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// date هنا قمنا بإنشاء تاريخ و وضعناه في الكائن
Date date = new Date();
// إفتراضياً Date التي يستخدمها الكلاس format جديدة لإظهار الوقت و لكننا إستخدمنا الـ format هنا قمنا بإنشاء
SimpleDateFormat sdf = new SimpleDateFormat("E MMM d hh:mm:ss zzz Y");
System.out.println( date );// عليه format بدون أن نطبق أي Date هنا قمنا بعرض الـ
System.out.println( sdf.format(date) );// عليه format مع تطبيق الـ Date هنا قمنا بعرض الـ
}
}
•نتيجة التنفيذ
Sun Sep 30 12:56:04 EET 2018
Sun Sep 30 12:56:04 EET 2018
Sun Sep 30 12:56:04 EET 2018
تحديد الـ format بواسطة الدالة printf()
يمكنك أيضاً إستخدام الدالة printf() لتعرض التاريخ و الوقت بالشكل الذي تريده.كل ما عليك فعله هو وضع %t ثم وضع حرف من الأحرف الموجودة في الجدول التالي.
| الحرف | إستخدامه | مثال |
|---|---|---|
| c | لإظهار التاريخ و الوقت بشكل كامل | Thu Dec 24 13:39:33 EET 2015 |
| F | لإظهار التاريخ بنظام ISO 8601 | 2015-12-24 |
| D | لإظهار التاريخ بنظام U.S. أي month/day/year | 12/24/15 |
| T | لإظهار الوقت بنظام 24 ساعة | 13:40:43 |
| r | لإظهار الوقت بنظام 12 ساعة | 01:40:43 PM |
| R | لإظهار الوقت بنظام 24 ساعة, و بدون إظهار الثواني | 13:40 |
| Y | لإظهار السنة, وتكون مؤلفة من أربع أرقام ( مع إبقاء الأصفار الموجودة على اليسار ) | 2015 |
| y | لإظهار آخر رقمين من السنة ( مع إبقاء الأصفار الموجودة على اليسار ) | 15 |
| C | لإظهار أول رقمين من السنة ( مع إبقاء الأصفار الموجودة على اليسار ) | 20 |
| B | لإظهار إسم الشهر كاملاَ | December |
| b | لإظهار إسم الشهر بشكل مختصر | Dec |
| m | لإظهار الشهر بشكل رقمين ( مع إبقاء الأصفار الموجودة على اليسار ) | 02 |
| d | لإظهار اليوم بشكل رقمين ( مع إبقاء الأصفار الموجودة على اليسار ) | 12 |
| e | لإظهار اليوم بشكل رقمين ( مع إزالة الأصفار الموجودة على اليسار ) | 24 |
| A | لإظهار إسم اليوم بشكل كامل | Thursday |
| a | لإظهار إسم اليوم بشكل مختصر | Thu |
| j | لإظهار رقم اليوم في السنة ( مع إبقاء الأصفار الموجودة على اليسار ) | 358 |
| H | لإظهار الساعة بنظام 24 ساعة ( مع إبقاء الأصفار الموجودة على اليسار ), الرقم يكون بين 00 و 23 | 13 |
| k | لإظهار الساعة بنظام 24 ساعة ( مع إزالة الأصفار الموجودة على اليسار ), الرقم يكون بين 0 و 23 | 13 |
| I | لإظهار الساعة بنظام 12 ساعة ( مع إبقاء الأصفار الموجودة على اليسار ), الرقم يكون بين 01 و 12 | 01 |
| l | لإظهار الساعة بنظام 12 ساعة ( مع إزالة الأصفار الموجودة على اليسار ), الرقم يكون بين 1 و 12 | 1 |
| M | لإظهار الدقائق ( مع إبقاء الأصفار الموجودة على اليسار ) | 02 |
| S | لإظهار الثواني ( مع إبقاء الأصفار الموجودة على اليسار ) | 09 |
| L | لإظهار الثواني بشكل ثلاث أرقام بالـ milliseconds ( مع إبقاء الأصفار الموجودة على اليسار ) | 959 |
| N | لإظهار الثواني بشكل تسعة أرقام بالـ nanoseconds ( مع إبقاء الأصفار الموجودة على اليسار ) | 959000000 |
| p | لإظهار إذا كان الوقت قبل الظهر أو بعد الظهر بأحرف صغيرة | pm |
| z | لإظهار الفارق بين وقت الجهاز و الوقت GMT | +0200 |
| Z | لإظهار المنطقة الزمنية | EET |
| s | لإظهار عدد الثواني منذ 1970/01/01 00:00:00 GMT | 1450958247 |
| Q | لإظهار عدد الثواني بالـ milliseconds منذ 1970/01/01 00:00:00 GMT | 1450958247680 |
يمكنك أن تعرض التاريخ و الوقت بطرق كثيرة جداً و بعدة أساليب.
المثال الأول
•سنقوم الآن بعرض التاريخ و الوقت بعدة أشكال بـ format نحددها بالدالة printf()
import java.util.Date;
public class Main {
public static void main(String[] args) {
// date هنا قمنا بإنشاء تاريخ و وضعناه في الكائن
Date date = new Date();
// هنا قمنا بعرض التاريخ والوقت
System.out.printf( "Current Date/time: %tc", date );
// هنا قمنا بعرض التاريخ فقط
System.out.printf( "\nCurrent Date: %tF", date );
// هنا قمنا بعرض الوقت فقط
System.out.printf( "\nCurrent time: %tr", date );
}
}
•نتيجة التنفيذ
Current Date/time: Sun Sep 30 12:58:46 EET 2018
Current Date: 2018-09-30
Current time: 12:58:46 PM
Current Date: 2018-09-30
Current time: 12:58:46 PM
•سنقوم الآن بعرض الوقت بـ format تتألف من ثلاث أحرف H و M و S
•أولاً سنقوم بوضع الأحرف الثلاثة ( الأول يشير للساعة, الثاني يشير للدقائق, و الثالث يشير للثواني ).
•ثانياً سنقوم بوضع كائن الـ Date لكل حرف منهم.
•يجب وضع فاصلة قبل كل كائن, و هكذا سيفهم المترجم أن الحرف الأول سيظهر لنا الساعة الموجودة في الكائن الأول, و الحرف الثاني سيظهر لنا الدقائق الموجودة في الكائن الثاني, و الحرف الثالث سيظهر لنا الثواني الموجودة في الكائن الثالث.
المثال الثاني
import java.util.Date;
public class Main {
public static void main(String[] args) {
// date هنا قمنا بإنشاء تاريخ و وضعناه في الكائن
Date date = new Date();
// هنا قمنا بعرض الوقت فقط
System.out.printf( "Current time: %tH:%tM:%tS", date, date, date );
}
}
•نتيجة التنفيذ
Current time: 13:03:15
لست مضطراً أن تضع الكائن Date لكل حرف كما فعلنا في المثال السابق.
يمكنك وضع أرقام index للأحرف التي ستستخدمها لإنشاء format معينة و هكذا سيصبح حجم الـ format أصغر أيضاً.
يجب وضع الأحرف المستخدمة في الـ format بترتيب معين بحيث تشير للـ Date و الـ String و أي شيء آخر تضعه في هذه الدالة كـ arguments.
رقم الـ index يتم إضافته مباشرةً بعد الرمز % و نضع بعده الرمز $, ثم الحرف t, ثم الحرف الذي نريده من الأحرف الموجودة في الجدول السابق.
أمثلة :
إذا كنا نضع index لـ Date نعتمد هذا الشكل: % index $ t format
مثال: %2$tAإذا كنا نضع index لـ String نعتمد هذا الشكل: % index $ s
مثال: %1$s
•سنقوم بوضع قيمة String في الـ index رقم 1.
•سنقوم بوضع كائن الـ Date في الـ index رقم 2.
•يجب وضع فاصلة قبل كل argument, و هكذا سيتم إعطاء كل argument منهم رقم index.
المثال الثالث
import java.util.Date;
public class Main {
public static void main(String[] args) {
// date هنا قمنا بإنشاء تاريخ و وضعناه في الكائن
Date date = new Date();
// هنا قمنا بعرض التاريخ فقط
System.out.printf( "%1$s %2$tA %2$te-%2$tm-%2$tY", "Today is:", date );
}
}
•نتيجة التنفيذ
Today is: Sunday 30-09-2018
يمكنك أيضاً إستخدام المؤشر < بدل إستخدام الـ index.
المؤشر < يعني أن الـ argument الذي تم استخدامه سابقاً سيعاد استخدامه من جديد.
المثال الرابع
•سنقوم الآن بتنفيذ نفس المثال السابق و لكننا سنستخدم المؤشر < بدل إستخدام الـ index.
import java.util.Date;
public class Main {
public static void main(String[] args) {
// date هنا قمنا بإنشاء تاريخ و وضعناه في الكائن
Date date = new Date();
// هنا قمنا بعرض التاريخ فقط
System.out.printf( "%s %tA %te-%<tm-%<tY", "Today is:", date );
}
}
•نتيجة التنفيذ
Today is: Sunday 30-9-2018
ليست هناك تعليقات:
إرسال تعليق
ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.