Időszak és időtartam Java-ban

1. Áttekintés

Ebben a gyors bemutatóban két új osztályt fogunk megnézni a Java 8-ban bevezetett dátumokkal való munka érdekében: Időszak és Időtartam.

Mindkét osztály felhasználható egy idő feltüntetésére vagy a két dátum közötti különbség meghatározására. A két osztály közötti fő különbség az Időszak dátum alapú értékeket használ, míg Időtartam időalapú értékeket használ.

2. Időszak Osztály

A Időszak osztály az év, a hónap és a nap egységeit használja egy időtartam képviseletére.

Megszerezhetjük a Időszak objektum két dátum közötti különbségként a között() módszer:

LocalDate startDate = LocalDate.of (2015, 2, 20); LocalDate endDate = LocalDate.of (2017, 1, 15); Period period = Period.between (startDate, endDate);

Ezután a módszerekkel meghatározhatjuk a periódus dátumegységeit getYears (), getMonths (), getDays ():

LOG.info ("Évek:" + period.getYears () + "months:" + period.getMonths () + "days:" + period.getDays ());

Ebben az esetben a isNegative () metódus, amely visszatér igaz ha bármelyik egység negatív, felhasználható annak megállapítására, hogy a befejezés dátuma magasabb, mint a kezdő dátum:

assertFalse (period.isNegative ());

Ha isNegative () hamis értéket ad vissza, akkor a kezdő dátum korábbi, mint a befejezés dátuma érték.

Egy másik módja annak hozzon létre egy Időszak Az objektum a napok, hónapok, hetek vagy évek számán alapul dedikált módszerekkel:

Időszak fromUnits = Periódus (3, 10, 10); Periódus a napoktól = Period.ofDays (50); Hónapok = Hónapok periódusa (5); Évszak = Évek periódusa (10); Heti időszak = Hetek időszaka (40); assertEquals (280, fromWeeks.getDays ());

Ha csak az egyik érték van jelen, például a ofDays () módszerrel, akkor a többi egység értéke 0.

A ofWeeks () metódus esetén a paraméter értékét a napok számának beállítására használjuk, szorozva azt 7-tel.

Azt is megtehetjük hozzon létre egy Időszak objektum egy szövegsor elemzésével, amelynek formátuma „PnYnMnD”:

Period fromCharYears = Period.parse ("P2Y"); assertEquals (2, fromCharYears.getYears ()); Period fromCharUnits = Period.parse ("P2Y3M5D"); assertEquals (5, fromCharUnits.getDays ());

A periódus értéke a forma módszereivel növelhető vagy csökkenthető pluszX () és mínuszX (), ahol X a dátumegységet jelenti:

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

3. Időtartam Osztály

A Időtartam osztály másodpercekben vagy nanoszekundumokban megadott időintervallumot jelent, és a legalkalmasabb rövidebb időtartam kezelésére, nagyobb pontosságot igénylő esetekben.

Meghatározhatjuk a két pillanat közötti különbséget a-ként Időtartam objektum a között() módszer:

Azonnali indítás = Instant.parse ("2017-10-03T10: 15: 30.00Z"); Azonnali vég = Instant.parse ("2017-10-03T10: 16: 30.00Z"); Időtartam időtartama = Időtartam. (Kezdet, vég) között;

Akkor használhatjuk a getSeconds () vagy getNanoseconds () módszerek az időegységek értékének meghatározására:

assertEquals (60, duration.getSeconds ());

Alternatív megoldásként Duration példányt két LocalDateTime példányból szerezhetünk be:

LocalTime start = LocalTime.of (1, 20, 25, 1024); LocalTime end = LocalTime.of (3, 22, 27, 1544); Duration.between (kezdet, vég) .getSeconds ();

A isNegative () módszerrel ellenőrizhető, hogy a végpont nagyobb-e, mint a kezdési pillanat:

assertFalse (duration.isNegative ());

Azt is megtehetjük megszerezni a Időtartam objektum több időegység alapján, a módszerek segítségével ofDays (), ofHours (), ofMillis (), ofMinutes (), ofNanos (), ofSeconds ():

Duration fromDays = Duration.ofDays (1); assertEquals (86400, fromDays.getSeconds ()); Duration fromMinutes = Duration.ofMinutes (60);

A Időtartam szövegsoron alapuló objektumnak ennek a „PnDTnHnMn.nS” formájúnak kell lennie:

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

Az időtartam átalakítható más időegységekre felhasználásával toDays (), toHours (), toMillis (), toMinutes ():

assertEquals (1, aMinutes.toHours () -tól);

Az időtartam értéke az űrlap módszereivel növelhető vagy csökkenthető pluszX () vagy mínuszX (), ahol X állhat napokig, órákig, milliszámokig, percekig, nanóként vagy másodpercekig:

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

Használhatjuk a plusz() és mínusz() metódusok egy paraméterrel, amely meghatározza a TemporalUnit hozzáadni vagy kivonni:

assertEquals (120, duration.plus (60, ChronoUnit.SECONDS) .getSeconds ()); assertEquals (30, időtartam.minusz (30, ChronoUnit.SECONDS) .getSeconds ());

4. Következtetés

Ebben az oktatóanyagban bemutattuk, hogyan használhatjuk a Időszak és Időtartam osztályok.

Mint mindig, a példák teljes forráskódja megtalálható a GitHub oldalon.


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