הוסף שעות לתאריך בג'אווה

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

לפני Java 8, java.util.Date היה אחד השיעורים הנפוצים ביותר לייצוג ערכי תאריך בשעה Java.

ואז ג'אווה 8 הציגה java.time.LocalDateTime ו java.time.ZonedDateTime. Java 8 גם מאפשר לנו לייצג זמן ספציפי על ציר הזמן באמצעות java.time. מיידי.

במדריך זה נלמד זאת להוסיף או לחסר נ שעות מתאריך זמן נתון בג'אווה. ראשית נבחן כמה שיעורים סטנדרטיים הקשורים לזמן Java, ואז נציג כמה אפשרויות של צד שלישי.

למידע נוסף על ה- API של Java 8 DateTime, אנו ממליצים לקרוא מאמר זה.

2. java.util.Date

אם אנו משתמשים ב- Java 7 ומטה, אנו יכולים להשתמש ב- java.util.Date ו java.util.Calendar שיעורים עבור הטיפול הקשור ביותר למועד.

בואו נראה איך להוסיף נ שעות לנתון תַאֲרִיך לְהִתְנַגֵד:

תאריך ציבורי addHoursToJavaUtilDate (תאריך תאריך, שעות int) {לוח שנה לוח שנה = Calendar.getInstance (); calendar.setTime (תאריך); calendar.add (Calendar.HOUR_OF_DAY, שעות); להחזיר calendar.getTime (); }

ציין זאת לוח שנה. HOUR_OF_DAY הכוונה לשעון 24 שעות.

השיטה לעיל מחזירה חדשה תַאֲרִיך אובייקט, שערכו יהיה או (תאריך + שעות) אוֹ (תאריך - שעות)תלוי אם אנו מעבירים ערך חיובי או שלילי של שעה (ות בהתאמה.

נניח שיש לנו יישום Java 8, אבל בכל זאת אנחנו רוצים לעבוד בדרך שלנו java.util.Date מקרים.

במקרה כזה נוכל לבחור בגישה החלופית הבאה:

  1. להשתמש java.util.DatetoInstant () שיטה להמיר תַאֲרִיך התנגדות ל java.time. מיידי למשל
  2. הוסף ספציפי מֶשֶׁך אל ה java.time. מיידי אובייקט באמצעות ועוד() שיטה
  3. התאושש שלנו java.util.Date למשל על ידי מעבר ב java.time. מיידי התנגדות ל java.util.Date.from () שיטה

בואו נסתכל במהירות על גישה זו:

@Test ציבורי בטל שניתןJavaUtilDate_whenUsingToInstant_thenAddHours () {תאריך actualDate = גרגוריאני חדש Kalender (2018, לוח שנה. JUNE, 25, 5, 0) .getTime (); תאריך expectDate = לוח שנה גרגוריאני חדש (2018, לוח שנה. JUNE, 25, 7, 0) .getTime (); assertThat (Date.from (actualDate.toInstant (). plus (Duration.ofHours (2)))) .isEqualTo (expectDate); }

עם זאת, שים לב לכך מומלץ תמיד להשתמש ב- API של DateTime החדש לכל היישומים בג'אווה 8 ומעלה.

3. java.time.LocalDateTime / ZonedDateTime

ב- Java 8 ואילך, הוספת שעות ל- a java.time.LocalDateTime או java.time.ZonedDateTime מופע די פשוט ועושה שימוש ב- plusHours () שיטה:

@Test ציבורי בטל givenLocalDateTime_whenUsingPlusHours_thenAddHours () {LocalDateTime actualDateTime = LocalDateTime .of (2018, חודש. JUNE, 25, 5, 0); LocalDateTime expectDateTime = LocalDateTime. של (2018, חודש. 25 ביוני, 10, 0); assertThat (actualDateTime.plusHours (5)). isEqualTo (expectDateTime); }

מה אם נרצה לחסר כמה שעות?

העברת ערך שלילי של שעות ל plusHours () השיטה תעשה בסדר גמור. עם זאת, מומלץ להשתמש ב- מינוס שעות () שיטה:

@Test הציבור בטל givenLocalDateTime_whenUsingMinusHours_thenSubtractHours () {LocalDateTime actualDateTime = LocalDateTime .of (2018, חודש. JUNE, 25, 5, 0); LocalDateTime expectDateTime = LocalDateTime .of (2018, חודש. JUNE, 25, 3, 0); assertThat (actualDateTime.minusHours (2)). isEqualTo (expectDateTime); }

ה plusHours () ו מינוס שעות () שיטות ב java.time.ZonedDateTime עובד בדיוק באותה צורה.

4. java.time. מיידי

כידוע, java.time. מיידי שהוצג ב- Java 8 DateTime API מייצג רגע ספציפי על ציר הזמן.

כדי להוסיף כמה שעות ל- רֶגַע אנו יכולים להשתמש בו ועוד() שיטה עם java.time.temporal.TemporalAmount:

@ מבט בטל פומבי שניתןInstant_whenUsingAddHoursToInstant_thenAddHours () {Instant actualValue = Instant.parse ("2018-06-25T05: 12: 35Z"); מיידי צפוי ערך = Instant.parse ("2018-06-25T07: 12: 35Z"); assertThat (actualValue.plus (2, ChronoUnit.HOURS)) .isEqualTo (expectValue); }

באופן דומה, ה מִינוּס() ניתן להשתמש בחיסור ספציפי TemporalAmount.

5. אפאצ'י קומונס DateUtils

ה DateUtils בכיתה מספריית Apache Commons Lang חושפת א סטָטִיaddHours () שיטה:

ציבורי סטטי ציבורי addHours (תאריך תאריך, סכום int)

השיטה מכניסה א java.util.Date חפץ יחד עם כמות ברצוננו להוסיף לו, שערכו יכול להיות חיובי או שלילי.

חדש java.util.Date האובייקט מוחזר כתוצאה:

@Test הציבור בטל שניתןJavaUtilDate_whenUsingApacheCommons_thenAddHours () {תאריך actualDate = גרגוריאני חדש Calender (2018, לוח שנה. JUNE, 25, 5, 0) .getTime (); תאריך expectDate = לוח שנה גרגוריאני חדש (2018, לוח שנה. JUNE, 25, 7, 0) .getTime (); assertThat (DateUtils.addHours (actualDate, 2)). isEqualTo (expectDate); }

הגרסה האחרונה של אפאצ'י קומונס לאנג זמין ב- Maven Central.

6. זמן ג'ודה

Joda Time הוא חלופה ל- Java 8 DateTime API ומספק את שלו תאריך שעה יישומים.

רוב זה תאריך שעה שיעורים קשורים חושפים plusHours () ו מינוס שעות () שיטות שיעזרו לנו להוסיף או להפחית מספר שעות נתון מ- תאריך שעה לְהִתְנַגֵד.

בואו נסתכל על דוגמה:

@Test הציבור בטל שניתןJodaDateTime_whenUsingPlusHoursToDateTime_thenAddHours () {DateTime actualDateTime = DateTime חדש (2018, 5, 25, 5, 0); DateTime expectDateTime = DateTime חדש (2018, 5, 25, 7, 0); assertThat (actualDateTime.plusHours (2)). isEqualTo (expectDateTime); }

אנו יכולים לבדוק בקלות את הגרסה האחרונה הזמינה של זמן ג'ודה במייבן סנטרל.

7. מסקנה

במדריך זה סקרנו מספר דרכים להוסיף או לחסר מספר שעות נתון מערכי זמן תאריך סטנדרטיים של Java.

בדקנו גם כמה ספריות צד שלישי כחלופה. כרגיל, קוד המקור השלם זמין ב- GitHub.


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