logo

תאריך ושעה של Java

החבילות java.time, java.util, java.sql ו-java.text מכילות מחלקות לייצוג תאריך ושעה. השיעורים הבאים חשובים להתמודדות עם תאריך בג'אווה.

Java 8 תאריך/שעה API

Java הציגה ממשק API חדש לתאריך ושעה מאז Java 8. חבילת java.time מכילה מחלקות תאריך ושעה של Java 8.

API קלאסי של תאריך/שעה

אבל גם Java Date API קלאסי או ישן שימושי. בואו לראות את רשימת שיעורי התאריך והשעה הקלאסיים.

עיצוב תאריך ושעה

אנו יכולים לעצב תאריך ושעה ב-Java באמצעות המחלקות הבאות:

ממשקי API של Java תאריך ושעה

Java מספקת את פונקציונליות התאריך והשעה בעזרת שתי חבילות java.time ו-java.util. החבילה java.time מוצגת ב-Java 8, והמחלקות החדשות שהוצגו מנסות להתגבר על החסרונות של מחלקות הדור הקודם java.util.Date ו-java.util.Calendar.

שיעורי API קלאסיים של תאריך שעה

המחלקות העיקריות לפני שחרור Java 8 היו:

רשימה בלתי ניתנת לשינוי

Java.lang.System: המחלקה מספקת את שיטת currentTimeMillis() המחזירה את הזמן הנוכחי באלפיות שניות. הוא מציג את התאריך והשעה הנוכחיים באלפיות שניות מה-1 בינואר 1970.

java.util.Date: הוא משמש להצגת רגע ספציפי של זמן, עם יחידת אלפיות השנייה.

java.util.Calendar: זוהי מחלקה אבסטרקטית המספקת שיטות להמרה בין מופעים ומניפולציה של שדות לוח השנה בדרכים שונות.

java.text.SimpleDateFormat: זוהי מחלקה המשמשת לעיצוב ולנתח התאריכים בצורה מוגדרת מראש או דפוס מוגדר על ידי משתמש.

java.util.TimeZone: זה מייצג היסט של אזור זמן, וגם מגלה את שעון הקיץ.

חסרונות של ממשקי API קיימים של תאריך/שעה

    בטיחות חוטים:השיעורים הקיימים כגון תאריך ולוח שנה אינם מספקים בטיחות שרשורים. מכאן שזה מוביל לבעיות בו-זמנית שקשה לאפות באגים שדרושות למפתחים לטפל בהן. ממשקי ה-API החדשים של תאריך ושעה של Java 8 מספקים בטיחות פתילים ואינם ניתנים לשינוי, ומכאן נמנעים מבעיית במקביל ממפתחים.עיצוב ממשק API גרוע:ממשקי API הקלאסיים של תאריך ולוח שנה אינם מספקים שיטות לביצוע פונקציות יומיומיות בסיסיות. מחלקות התאריך והשעה שהוצגו ב-Java 8 מתמקדות ב-ISO ומספקות מספר שיטות שונות לביצוע פעולות לגבי תאריך, שעה, משך ותקופות.טיפול קשה באזור זמן:קשה להתמודד עם אזור הזמן באמצעות מחלקות תאריך ולוח שנה קלאסיות מכיוון שהמפתחים היו אמורים לכתוב את ההיגיון עבורו. עם ממשקי ה-API החדשים, הטיפול באזור הזמן יכול להיעשות בקלות עם ממשקי API של Local ו- ZonedDate/Time.

API חדש של תאריך ושעה ב-Java 8

ה-API החדש של תאריך עוזר להתגבר על החסרונות שהוזכרו לעיל עם המחלקות מדור קודם. הוא כולל את השיעורים הבאים:

java.time.LocalDate: הוא מייצג יום-שנה-חודש בלוח השנה של ISO והוא שימושי לייצוג תאריך ללא זמן. ניתן להשתמש בו כדי לייצג מידע על תאריך בלבד, כגון תאריך לידה או תאריך חתונה.

java.time.LocalTime: זה עוסק בזמן בלבד. זה שימושי לייצוג השעה המבוססת על אדם ביום, כגון זמני סרטים, או זמני הפתיחה והסגירה של הספרייה המקומית.

java.time.LocalDateTime: הוא מטפל גם בתאריך וגם בשעה, ללא אזור זמן. זהו שילוב של LocalDate עם LocalTime.

java.time.ZonedDateTime: הוא משלב את המחלקה LocalDateTime עם מידע האזור שניתן במחלקה ZoneId. זה מייצג חותמת זמן מלאה של תאריך יחד עם מידע על אזור זמן.

java.time.OffsetTime: הוא מטפל בזמן עם היסט אזור זמן מתאים מגריניץ'/UTC, ללא מזהה אזור זמן.

java.time.OffsetDateTime: הוא מטפל בתאריך ושעה עם היסט אזור זמן מתאים מגריניץ'/UTC, ללא מזהה אזור זמן.

java.time.Clock : הוא מספק גישה לרגע הנוכחי, לתאריך ולשעה בכל אזור זמן נתון. למרות שהשימוש במחלקת השעון הוא אופציונלי, תכונה זו מאפשרת לנו לבדוק את הקוד שלך עבור אזורי זמן אחרים, או באמצעות שעון קבוע, שבו הזמן אינו משתנה.

java.time.Instant : הוא מייצג את ההתחלה של ננו-שנייה על ציר הזמן (מאז EPOCH) ושימושי ליצירת חותמת זמן לייצוג זמן מכונה. לרגע המתרחש לפני העידן יש ערך שלילי, ולרגע המתרחש אחרי העידן יש ערך חיובי.

java.time.Duration : הבדל בין שני רגעים ונמדד בשניות או ננו-שניות ואינו משתמש במבנים מבוססי תאריך כגון שנים, חודשים וימים, אם כי המחלקה מספקת שיטות הממירות לימים, שעות ודקות.

java.time.Period : הוא משמש להגדרת ההבדל בין תאריכים בערכים מבוססי תאריך (שנים, חודשים, ימים).

java.time.ZoneId : הוא מציין מזהה אזור זמן ומספק כללים להמרה בין Instant ל-LocalDateTime.

java.time.ZoneOffset : זה מתאר היסט של אזור זמן משעון גריניץ'/UTC.

java.time.format.DateTimeFormatter : זה מגיע עם פורמטים מוגדרים מראש שונים, או שאנחנו יכולים להגדיר משלנו. יש לו שיטת parse() או format() לניתוח ועיצוב ערכי התאריך והשעה.