Razdoblje i trajanje u Javi

1. Pregled

U ovom ćemo brzom vodiču pogledati dva nova razreda za rad s datumima predstavljenim u Javi 8: Razdoblje i Trajanje.

Obje se klase mogu koristiti za predstavljanje vremena ili određivanje razlike između dva datuma. Glavna razlika između te dvije klase je ta Razdoblje koristi vrijednosti temeljene na datumu, dok Trajanje koristi vrijednosti temeljene na vremenu.

2. Razdoblje Razred

The Razdoblje razred koristi jedinice godina, mjesec i dan za predstavljanje vremenskog razdoblja.

Možemo dobiti a Razdoblje objekt kao razlika između dva datuma pomoću između() metoda:

LocalDate startDate = LocalDate.of (2015, 2, 20); LocalDate endDate = LocalDate.of (2017, 1, 15); Razdoblje razdoblja = Razdoblje između (datum početka, kraj datuma);

Tada pomoću metoda možemo odrediti datumske jedinice razdoblja getYears (), getMonths (), getDays ():

LOG.info ("Godine:" + period.getYears () + "mjeseci:" + period.getMonths () + "dani:" + period.getDays ());

U ovom slučaju, jeNegativan () metoda, koja se vraća pravi ako je neka od jedinica negativna, može se upotrijebiti za utvrđivanje je li krajnji datum je veći od početni datum:

assertFalse (period.isNegative ());

Ako jeNegativno () vraća false, a zatim početni datum je ranije od krajnji datum vrijednost.

Drugi način da stvoriti Razdoblje objekt temelji se na broju dana, mjeseci, tjedana ili godina koristeći namjenske metode:

Razdoblje odjedinica = Razdoblje (3, 10, 10); Period fromDays = Razdoblje dana (50); Razdoblje od mjeseci = Razdoblje mjeseci (5); Razdoblje odGodina = RazdobljeGodina (10); Razdoblje od tjedana = Razdoblje tjedana (40); assertEquals (280, fromWeeks.getDays ());

Ako je prisutna samo jedna od vrijednosti, na primjer pomoću ofDays () metoda, tada je vrijednost ostalih jedinica 0.

U slučaju tjedana () metodom, vrijednost parametra koristi se za postavljanje broja dana množenjem sa 7.

Možemo i mi stvoriti Razdoblje objekt raščlanjivanjem tekstualnog niza, koji mora imati format “PnYnMnD”:

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

Vrijednost razdoblja može se povećati ili smanjiti metodama obrasca plusX () i minusX (), gdje X predstavlja datumsku jedinicu:

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

3. Trajanje Razred

The Trajanje klasa predstavlja vremenski interval u sekundama ili nanosekundama i najprikladnija je za obradu kraćih količina vremena, u slučajevima koji zahtijevaju veću preciznost.

Razliku između dva trenutka možemo odrediti kao a Trajanje objekt pomoću između() metoda:

Trenutni početak = Instant.parse ("2017-10-03T10: 15: 30.00Z"); Trenutni kraj = Instant.parse ("2017-10-03T10: 16: 30.00Z"); Trajanje trajanja = Trajanje.među (početak, kraj);

Tada možemo koristiti getSeconds () ili getNanosekunde () metode za određivanje vrijednosti vremenskih jedinica:

assertEquals (60, duration.getSeconds ());

Inače, instancu Duration možemo dobiti iz dvije instance LocalDateTime:

LocalTime start = LocalTime.of (1, 20, 25, 1024); Kraj lokalnog vremena = LocalTime.of (3, 22, 27, 1544); Trajanje.između (početka, završetka) .getSeconds ();

The jeNegativan () metodom se može provjeriti je li krajnji trenutak veći od početnog trenutka:

assertFalse (duration.isNegative ());

Možemo i mi dobiti a Trajanje objekt temeljen na nekoliko vremenskih jedinica, koristeći metode ofDays (), ofHours (), ofMillis (), ofMinutes (), ofNanos (), ofSeconds ():

Duration fromDays = Duration.ofDays (1); assertEquals (86400, fromDays.getSeconds ()); Trajanje od minuta = Trajanje minuta (60);

Za stvaranje a Trajanje objekt zasnovan na sekvenci teksta, on mora biti u obliku "PnDTnHnMn.nS":

Trajanje odChar1 = Duration.parse ("P1DT1H10M10.5S"); Trajanje odChar2 = Duration.parse ("PT10M");

Trajanje se može pretvoriti u druge vremenske jedinice koristeći toDays (), toHours (), toMillis (), toMinutes ():

assertEquals (1, fromMinutes.toHours ());

Vrijednost trajanja može se povećati ili smanjiti upotrebom metoda obrasca plusX () ili minusX (), gdje X može stajati danima, satima, milisima, minutama, nanosima ili sekundama:

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

Također možemo koristiti plus() i minus() metode s parametrom koji specificira TemporalUnit za sabiranje ili oduzimanje:

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

4. Zaključak

U ovom uputstvu pokazali smo kako možemo koristiti Razdoblje i Trajanje razreda.

Kao i uvijek, puni izvorni kod primjera može se naći na GitHubu.


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