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.