مقدمة
تستخدم فئتا 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
) المنطقة:
Output3 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
) المنطقة:
Output11: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”:
Output01-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”:
Output13: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
) بدون وقت محدد:
OutputSat 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
) بدون تاريخ محدد:
OutputThu 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
):
Outputmardi janvier 2018 14:51:02.354+0530
يتم تسمية اليوم والشهر باللغة الفرنسية استنادًا إلى Locale
المقدم كإدخال – mardi
هو “الثلاثاء” و janvier
هو “يناير”.
الاستنتاج
في هذا المقال، تعرفت على SimpleDateFormat
و DateFormat
في جافا.
المرجع:
Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format