Java SimpleDateFormat – تنسيق التاريخ في جافا

مقدمة

تستخدم فئتا Java SimpleDateFormat و DateFormat لتنسيق التواريخ. يتم استخدامهما بشكل رئيسي حيث نحتاج إلى عرض أو استخدام وظيفة التاريخ والوقت في Java. كلا هذه الفئتين موجودتان في حزمة com.text.

فئة Java DateFormat

  • تُستخدم DateFormat لتنسيق تاريخ إلى String بناءً على المنطقة الجغرافية المحددة التي تُقدم كمدخل.
  • تُستخدم المنطقة الجغرافية لتحديد المنطقة واللغة لجعل الكود أكثر ملائمة للمستخدم.
  • الطريقة التي يُكتب بها التاريخ مختلفة في مناطق مختلفة من العالم. على سبيل المثال، سيُكتب 31st Dec 2017 في الهند على أنه 31-12-2017 لكن الشيء نفسه سيُكتب في الولايات المتحدة الأمريكية على أنه 12-31-2017.
  • فئات DateFormat غير متزامنة، ويُوصى بإنشاء مثيل منفصل لكل موضوع.

A DateFormat object can be created using the getDateInstance() and getTimeInstance() method of the DateFormat class.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

ملاحظة: تم توقيف استخدام بناء الكائن Locale(String, String) منذ الإصدار 19

Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();

طريقة getDateInstance من DateFormat تحتاج إلى معلمتين دخل. الباراميتر الأول يحدد DateFormat المستخدمة والباراميتر الثاني هو الإعداد المحلي.

باستخدام format

DateFormat الصنف لديه طريقة format المسؤولة عن التنسيق.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

سيقوم هذا الكود بتنسيق التاريخ باللغة الفرنسية (fr) وفرنسا (FR) المنطقة:

Output
3 janv. 2018

باستخدام getTimeInstance()

لإنشاء مثيل لـ DateFormat نستخدم طريقة getDateInstance().

لتنسيق الوقت، نحتاج إلى مثيل للوقت. سنستخدم طريقة getTimeInstance() للحصول على مثيل للوقت.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

سيقوم هذا الكود بتنسيق الوقت باللغة الفرنسية (fr) وفرنسا (FR) المنطقة:

Output
11:03:01

Java SimpleDateFormat

SimpleDateFormat مشابه لـ DateFormat. الفارق الرئيسي الوحيد بينهما هو أن SimpleDateFormat يمكن استخدامه لتنسيق (تحويل Date إلى String) وللتحليل (تحويل String إلى Date) بدعم اللغة المحلية، بينما لا يوفر DateFormat دعم للغة المحلية. DateFormat هو فئة مجردة توفر الدعم الأساسي لتنسيق وتحليل التواريخ. SimpleDateFormat هي الفئة الملموسة التي تمتد من فئة DateFormat.

SimpleDateFormat يمكن إنشاؤه باستخدام مُنشئ SimpleDateFormat. المُنشئ هو مُنشئ مُعلمة ويحتاج إلى نمط String كمعلمة.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

سلسلة pattern هي النمط الذي سيتم استخدامه لتنسيق تاريخ وسيتم إنشاء الإخراج بتلك النمط كـ “MM-dd-yyyy“.

الأنماط

دعونا نلقي نظرة على بنية النمط التي يجب استخدامها لنمط التنسيق.

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018 (yyyy), 18 (yy)
M Month in year July (MMMM), Jul (MMM), 07 (MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09 (dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

يجب استخدام بعض الحروف بكميات مختلفة لنتائج مختلفة مثل الشهر:

Type Pattern Example Output
Full Month MMMM July
Abbreviated Month MMM Jul
Numeric Month MM 07

أمثلة

لنلق نلقي الآن نظرة على بعض الأمثلة لتنسيقات مختلفة للتاريخ والوقت.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

استخدام SimpleDateFormat()

لكي نقوم بتحليل التاريخ، نحتاج إلى إنشاء مثيل من SimpleDateFormat باستخدام البناء، ثم استخدام طريقة format():

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

سيخرج هذا الكود “MM-dd-yyyy”:

Output
01-02-2018

هذا النمط ينتج “الشهر في السنة”، “اليوم في الشهر”، و “السنة”. نوع الحرف (والتأهيل الكبير) وكمية الأحرف تساهم في السلسلة. ستمثل الشهر بأرقام مكونة من رقمين، اليوم برقمين، والسنة بأربعة أرقام.

عرض هذا الكود التاريخ “2 يناير 2018” كـ “01-02-2018“.

بالنسبة لتحليل الوقت، يجب علينا تغيير النمط أثناء إنشاء مثيل SimpleDateFormat.

String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

سيخرج هذا الكود “HH:mm:ss.SSSZ”:

Output
13:03:15.454+0530

هذا النمط ينتج “ساعات”، “دقائق”، “ثواني”، “ميلي ثانية”، و “تعويض المنطقة الزمنية بالساعات (نمط RFC)”.

عرض هذا الكود الوقت كـ “13:03:15.454+0530“.

استخدام parse()

التحليل هو تحويل السلسلة إلى مثيل من الفئة java.util.Date. يمكننا تحليل سلسلة إلى مثيل تاريخ باستخدام طريقة parse() في فئة SimpleDateFormat. لتحليل سلسلة إلى تاريخ، نحتاج إلى مثيل من فئة SimpleDateFormat ونمط سلسلة كإدخال لمنشئ الفئة.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

سينتج هذا تاريخًا (12-01-2018) بدون وقت محدد:

Output
Sat Dec 01 00:00:00 IST 2018

الآن دعنا نلقي نظرة على مثال لـ SimpleDateFormat لتحليل الوقت.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

سينتج هذا وقتًا (22:00:03) بدون تاريخ محدد:

Output
Thu Jan 01 22:00:03 IST 1970

لأننا لم نحدد أي تاريخ، اعتبر البرنامج العصر كالتاريخ (أي 01-Jan-1970).

استخدام Locale

لقد عملنا مع Locale كجزء من DateFormat ورأينا أن اللغات تستخدم استنادًا إلى المناطق.

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);

سيقوم هذا الكود بتنسيق الوقت الحالي باللغة الفرنسية (fr) ومنطقة فرنسا (FR):

Output
mardi janvier 2018 14:51:02.354+0530

يتم تسمية اليوم والشهر باللغة الفرنسية استنادًا إلى Locale المقدم كإدخال – mardi هو “الثلاثاء” و janvier هو “يناير”.

الاستنتاج

في هذا المقال، تعرفت على SimpleDateFormat و DateFormat في جافا.

المرجع:

Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format