תקופה ומשך זמן בג'אווה

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

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

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

2. פרק זמן מעמד

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

אנחנו יכולים להשיג א פרק זמן אובייקט כהבדל בין שני תאריכים באמצעות בֵּין() שיטה:

LocalDate startDate = LocalDate.of (2015, 2, 20); LocalDate endDate = LocalDate.of (2017, 1, 15); תקופת תקופה = Period.between (startDate, endDate);

לאחר מכן, אנו יכולים לקבוע את יחידות התאריך של התקופה בשיטות getYears (), getMonths (), getDays ():

LOG.info ("שנים:" + period.getYears () + "חודשים:" + period.getMonths () + "ימים:" + period.getDays ());

במקרה זה, isNegative () שיטה, המחזירה נָכוֹן אם אחת מהיחידות שלילית, ניתן להשתמש בה כדי לקבוע אם ה- תאריך סיום גבוה מה- תאריך התחלה:

assertFalse (period.isNegative ());

אם isNegative () מחזיר שקר ואז ה- תאריך התחלה מוקדם יותר מה- תאריך סיום ערך.

דרך נוספת ליצור פרק זמן האובייקט מבוסס על מספר הימים, החודשים, השבועות או השנים באמצעות שיטות ייעודיות:

תקופה מ- Units = Period.of (3, 10, 10); תקופה fromDays = Period.ofDays (50); תקופה fromMonths = Period.ofMonths (5); תקופה מ- Year = Period.ofYears (10); תקופה מ- Week = Period.ofWeeks (40); assertEquals (280, fromWeeks.getDays ());

אם רק אחד מהערכים קיים, למשל באמצעות ofDays () שיטה, אז הערך של היחידות האחרות הוא 0.

במקרה של ofWeeks () בשיטה, ערך הפרמטר משמש להגדרת מספר הימים על ידי הכפלתו ב- 7.

אנחנו יכולים גם ליצור פרק זמן אובייקט על ידי ניתוח רצף טקסט, שעליו להיות בפורמט "PnYnMnD":

תקופה fromCharYears = Period.parse ("P2Y"); assertEquals (2, fromCharYears.getYears ()); תקופה fromCharUnits = Period.parse ("P2Y3M5D"); assertEquals (5, fromCharUnits.getDays ());

ניתן להגדיל או להקטין את ערך התקופה בשיטות הטופס plusX () ו מינוס X (), כאשר X מייצג את יחידת התאריך:

assertEquals (56, period.plusDays (50) .getDays ()); assertEquals (9, period.minusMonths (2) .getMonths ());

3. מֶשֶׁך מעמד

ה מֶשֶׁך class מייצג מרווח זמן בשניות או ננו-שניות והוא מתאים ביותר לטיפול בכמויות זמן קצרות יותר, במקרים הדורשים דיוק רב יותר.

אנו יכולים לקבוע את ההבדל בין שני רגעים כ- מֶשֶׁך אובייקט באמצעות בֵּין() שיטה:

התחלה מיידית = Instant.parse ("2017-10-03T10: 15: 30.00Z"); סוף מיידי = Instant.parse ("2017-10-03T10: 16: 30.00Z"); משך זמן = משך. בין (התחלה, סוף);

אז נוכל להשתמש ב- getSeconds () אוֹ getNanoseconds () שיטות לקביעת ערך יחידות הזמן:

assertEquals (60, duration.getSeconds ());

לחלופין, אנו יכולים להשיג מופע משך משני מופעים LocalDateTime:

התחלה LocalTime = LocalTime.of (1, 20, 25, 1024); LocalTime end = LocalTime.of (3, 22, 27, 1544); Duration.between (התחלה, סוף) .getSeconds ();

ה isNegative () ניתן להשתמש בשיטה כדי לוודא אם רגע הסיום גבוה יותר מרגע ההתחלה:

assertFalse (duration.isNegative ());

אנחנו יכולים גם להשיג מֶשֶׁך אובייקט המבוסס על מספר יחידות זמן, תוך שימוש בשיטות ofDays (), ofHours (), ofMillis (), ofMinutes (), ofNanos (), ofSeconds ():

משך הימים = Duration.ofDays (1); assertEquals (86400, fromDays.getSeconds ()); משך דקות מ = דקות. משך דקות (60);

ליצור מֶשֶׁך אובייקט המבוסס על רצף טקסט, זה צריך להיות בצורה "PnDTnHnMn.nS":

משך fromChar1 = Duration.parse ("P1DT1H10M10.5S"); Duration fromChar2 = Duration.parse ("PT10M");

ניתן להמיר משך ליחידות זמן אחרות באמצעות toDays (), toHours (), toMillis (), toMinutes ():

assertEquals (1, fromMinutes.toHours ());

ניתן להגדיל או להקטין ערך משך בשיטות הטופס plusX () אוֹ מינוס X (), איפה X יכול לעמוד במשך ימים, שעות, מילי, דקות, ננו או שניות:

assertEquals (120, duration.plusSeconds (60) .getSeconds ()); assertEquals (30, duration.minusSeconds (30) .getSeconds ());

אנחנו יכולים גם להשתמש ב- ועוד() ו מִינוּס() שיטות עם פרמטר המציין את TemporalUnit להוסיף או לחסר:

assertEquals (120, duration.plus (60, ChronoUnit.SECONDS) .getSeconds ()); assertEquals (30, duration.minus (30, ChronoUnit.SECONDS) .getSeconds ());

4. מסקנה

במדריך זה הראינו כיצד אנו יכולים להשתמש ב- פרק זמן ו מֶשֶׁך שיעורים.

כמו תמיד, ניתן למצוא את קוד המקור המלא של הדוגמאות ב- GitHub.


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