הקדמה
מחלקות SimpleDateFormat
ו־DateFormat
ב־Java משמשות לעיצוב תאריכים. נהוג להשתמש בהן בעיקר כאשר נדרש להציג או להשתמש בפונקציות תאריך ושעה ב־Java. שתי המחלקות הללו קיימות בחבילת com.text
.
מחלקת DateFormat
ב־Java
DateFormat
משמשת לעיצוב תאריך לתווים מסוימים בהתאם לאזור מסוים המסופק כקלט.- האזור משמש לציון האזור והשפה כדי להפוך את הקוד לפתוח יותר למשתמש.
- האופן שבו נכתב תאריך שונה באזורים שונים בעולם. לדוגמה,
31 בדצמבר 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
של Java.
הסבר:
Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format