בודק אם שני תאריכי Java נמצאים באותו היום

1. סקירה כללית

במדריך המהיר הזה, נלמד על מספר דרכים שונות לבדוק אם שתי java.util.Date לאובייקטים יש את אותו היום.

נתחיל בבחינת פתרונות המשתמשים ב- Java הליבה - כלומר בתכונות Java 8 - לפני שנבחן כמה חלופות לפני Java 8.

לסיום, נבחן גם כמה ספריות חיצוניות - Apache Commons Lang, Joda-Time ו- Date4J.

2. ליבת ג'אווה

הכיתה תַאֲרִיך מייצג רגע ספציפי בזמן, עם דיוק באלפיות השנייה. כדי לברר אם שניים תַאֲרִיך אובייקטים מכילים את אותו היום, עלינו לבדוק אם השנה-חודש-יום זהה לשני האובייקטים ולזרוק את היבט הזמן.

2.1. באמצעות LocalDate

באמצעות ה- API החדש של Date-Time של Java 8, אנו יכולים להשתמש ב- LocalDate לְהִתְנַגֵד. זהו אובייקט בלתי משתנה המייצג תאריך ללא זמן.

בואו נראה איך נוכל לבדוק אם שניים תַאֲרִיך לאובייקטים באותו יום משתמשים בכיתה זו:

בוליאני סטטי ציבורי isSameDay (תאריך תאריך 1, תאריך תאריך 2) {LocalDate localDate1 = date1.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); LocalDate localDate2 = date2.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); החזר localDate1.isEqual (localDate2); }

בדוגמה זו, המירו את שניהם תַאֲרִיך חפצים ל LocalDate באמצעות אזור הזמן המוגדר כברירת מחדל. לאחר הגיור, אנחנו רק צריכים לבדוק אם ה LocalDate אובייקטים שווים באמצעות שווה שיטה.

כתוצאה מכך, באמצעות גישה זו, נוכל לקבוע אם השניים תַאֲרִיך אובייקטים מכילים את אותו היום.

2.2. באמצעות רֶגַע

בדוגמה שלמעלה השתמשנו רֶגַע כאובייקט ביניים בעת המרה תַאֲרִיך חפצים ל LocalDate חפצים. רֶגַע, שהוצג ב- Java 8, מייצג נקודת זמן ספציפית.

אנחנו יכולים ישירות לקטוע את רֶגַע מתנגד ליחידת DAYS, שמגדיר את ערכי שדה הזמן לאפס, ואז נוכל להשוות ביניהם:

בוליאני סטטי ציבורי isSameDayUsingInstant (תאריך תאריך 1, תאריך תאריך 2) {אינסטנט מיידי 1 = תאריך 1. לאינסטנט (). truncatedTo (ChronoUnit.DAYS); Instant2 מיידי = date2.toInstant () .truncatedTo (ChronoUnit.DAYS); להחזיר instant1.equals (instant2); }

2.3. באמצעות SimpleDateFormat

מאז הגרסאות המוקדמות של Java, הצלחנו להשתמש ב- SimpleDateFormat בכיתה להמיר בין תַאֲרִיך ו חוּט ייצוגי אובייקט. שיעור זה מגיע עם תמיכה בהמרה באמצעות דפוסים רבים. במקרה שלנו, נשתמש בתבנית "yyyyMMdd".

באמצעות זה, אנו נעצב את תַאֲרִיך, להמיר אותו לא חוּט ואז השווה אותם באמצעות התקן שווים שיטה:

ציבור בוליאני סטטי ציבורי isSameDay (תאריך תאריך 1, תאריך תאריך 2) {SimpleDateFormat fmt = חדש SimpleDateFormat ("yyyyMMdd"); החזר fmt.format (תאריך 1). שווה (fmt.format (תאריך 2)); }

2.4. באמצעות לוּחַ שָׁנָה

ה לוּחַ שָׁנָה class מספק שיטות לקבלת ערכים של יחידות תאריך-שעה שונות למשך זמן מסוים.

ראשית, עלינו ליצור לוּחַ שָׁנָה למשל ולהגדיר את לוּחַ שָׁנָה זמן אובייקטים תוך שימוש בכל אחד מהתאריכים שסופקו. אז נוכל לשאול ו השווה את התכונות שנה-חודש-יום בנפרד כדי להבין אם ה תַאֲרִיך לאובייקטים אותו יום:

ציבורי בוליאני סטטי ציבורי isSameDay (תאריך תאריך 1, תאריך תאריך 2) {לוח שנה לוח שנה 1 = Calendar.getInstance (); calendar1.setTime (תאריך 1); לוח שנה לוח שנה 2 = Calendar.getInstance (); לוח שנה 2. setTime (תאריך 2); החזר calendar1.get (Calendar.YEAR) == calendar2.get (Calendar.YEAR) && calendar1.get (Calendar.MONTH) == calendar2.get (Calendar.MONTH) && calendar1.get (Calendar.DAY_OF_MONTH) == לוח השנה 2 .get (לוח שנה. DAY_OF_MONTH); }

3. ספריות חיצוניות

עכשיו שיש לנו הבנה טובה כיצד להשוות תַאֲרִיך אובייקטים המשתמשים בממשקי ה- API החדשים והישנים המוצעים על ידי Java הליבה, בואו נסתכל על כמה ספריות חיצוניות.

3.1. אפאצ'י קומונס לאנג DateUtils

ה DateUtils class מספק כלי עזר שימושיים רבים שמקלים על העבודה עם המורשת לוּחַ שָׁנָה ו תַאֲרִיך חפצים.

חפץ Apache Commons Lang זמין ממייבן סנטרל:

 org.apache.commons commons-lang3 3.9 

אז אנחנו יכולים פשוט להשתמש בשיטה isSameDay מ DateUtils:

DateUtils.isSameDay (date1, date2);

3.2. ספריית ג'ודה-טיים

אלטרנטיבה לליבה של Java תַאֲרִיך ו זְמַן הספרייה היא Joda-Time. ספרייה נפוצה זו משמשת תחליף מצוין בעבודה עם תאריך ושעה.

את החפץ ניתן למצוא במייבאן סנטרל:

 joda-time joda-time 2.10 

בספריה זו, org.joda.time.LocalDate מייצג תאריך ללא זמן. לפיכך, אנו יכולים לבנות את LocalDate חפצים מה- java.util.Date ואז השווה אותם:

בוליאני סטטי ציבורי isSameDay (תאריך תאריך 1, תאריך תאריך 2) {org.joda.time.LocalDate localDate1 = org.joda.time.LocalDate חדש (תאריך 1); org.joda.time.LocalDate localDate2 = org.joda.time.LocalDate חדש (תאריך 2); להחזיר localDate1.equals (localDate2); }

3.3. ספריית Date4J

Date4j מספק גם יישום פשוט ופשוט שנוכל להשתמש בו.

כמו כן, הוא זמין גם ממייבן סנטרל:

 com.darwinsys hirondelle-date4j 1.5.1 

באמצעות הספרייה הזו, אנחנו צריכים לבנות את תאריך שעה חפץ מ- java.util.Date לְהִתְנַגֵד. אז אנחנו יכולים פשוט להשתמש ב isSameDayAs שיטה:

בוליאני סטטי ציבורי isSameDay (תאריך תאריך 1, תאריך תאריך 2) {DateTime dateObject1 = DateTime.forInstant (date1.getTime (), TimeZone.getDefault ()); DateTime dateObject2 = DateTime.forInstant (date2.getTime (), TimeZone.getDefault ()); date returnObject1.isSameDayAs (dateObject2); }

4. מסקנה

במדריך מהיר זה בדקנו כמה דרכים לבדוק אם שתי java.util.Date אובייקטים מכילים את אותו היום.

כמו תמיד, קוד המקור המלא של המאמר זמין באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found