معرفة التاريخ و الوقت الحالي
معرفة التاريخ و الوقت الحالي سهلة جداً في جافا. كل ما عليك فعله هو إنشاء كائن من الكلاس 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
ليست هناك تعليقات:
إرسال تعليق
ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.