GagorAcadmey

تعلم برمجة تطبيقات الاندرويد من الصفر حتي الاحتراف

آخر المواضيع

السبت، 25 أغسطس 2018

الوقت والتاريخ في جافا

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

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

دوال الكلاس 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

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

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

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

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

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

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

من خلال الجدول السابق يمكنك معرفة أن الكلاس 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

تحديد الـ 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

سنقوم الآن بعرض الوقت بـ 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, ثم الحرف الذي نريده من الأحرف الموجودة في الجدول السابق.
أمثلة :
  1. إذا كنا نضع index لـ Date نعتمد هذا الشكل: % index $ t format
    مثال: %2$tA

  2. إذا كنا نضع 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

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحتنا علي الفيسبوك

التسميات

المتواجدين حاليا