Periode og varighet i Java

1. Oversikt

I denne raske opplæringen skal vi se på to nye klasser for å jobbe med datoer introdusert i Java 8: Periode og Varighet.

Begge klassene kan brukes til å representere en tid eller bestemme forskjellen mellom to datoer. Det viktigste skillet mellom de to klassene er at Periode bruker datobaserte verdier, mens Varighet bruker tidsbaserte verdier.

2. Periode Klasse

De Periode klasse bruker enhetene år, måned og dag for å representere en tidsperiode.

Vi kan få en Periode objektet som forskjellen mellom to datoer ved å bruke mellom() metode:

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

Deretter kan vi bestemme datoenhetene for perioden ved hjelp av metodene getYears (), getMonths (), getDays ():

LOG.info ("År:" + period.getYears () + "måneder:" + period.getMonths () + "dager:" + period.getDays ());

I dette tilfellet er negativ () metode, som returnerer ekte hvis noen av enhetene er negative, kan brukes til å avgjøre om sluttdato er høyere enn startdato:

assertFalse (period.isNegative ());

Hvis er negativ () returnerer falsk, så blir startdato er tidligere enn sluttdato verdi.

En annen måte å lage en Periode objektet er basert på antall dager, måneder, uker eller år ved hjelp av dedikerte metoder:

Period fromUnits = Period.of (3, 10, 10); Period fromDays = Period.ofDays (50); Period fromMonths = Period.ofMonths (5); Periode fraYears = Period.ofYears (10); Periode fra uker = Period.ofWeeks (40); assertEquals (280, fromWeeks.getDays ());

Hvis bare en av verdiene er til stede, for eksempel ved å bruke ofDays () metode, så er verdien på de andre enhetene 0.

I tilfelle av ofWeeks () metode brukes parameterverdien til å angi antall dager ved å multiplisere den med 7.

Vi kan også lage en Periode objekt ved å analysere en tekstsekvens, som må ha formatet "PnYnMnD":

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

Verdien av perioden kan økes eller reduseres ved å bruke metoder i skjemaet plusX () og minusX (), hvor X representerer datoenheten:

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

3. Varighet Klasse

De Varighet klasse representerer et tidsintervall i sekunder eller nanosekunder og er mest egnet for håndtering av kortere tidsperioder, i tilfeller som krever mer presisjon.

Vi kan bestemme forskjellen mellom to øyeblikk som en Varighet objektet ved hjelp av mellom() metode:

Øyeblikkelig start = Instant.parse ("2017-10-03T10: 15: 30.00Z"); Øyeblikkelig slutt = Instant.parse ("2017-10-03T10: 16: 30.00Z"); Varighet varighet = Varighet. Mellom (start, slutt);

Da kan vi bruke getSeconds () eller getNanoseconds () metoder for å bestemme verdien på tidsenhetene:

assertEquals (60, duration.getSeconds ());

Alternativt kan vi få en varighetsforekomst fra to LocalDateTime-forekomster:

LocalTime start = LocalTime.of (1, 20, 25, 1024); LocalTime end = LocalTime.of (3, 22, 27, 1544); Varighet. Mellom (start, slutt) .getSeconds ();

De er negativ () metoden kan brukes til å verifisere om sluttøyeblikket er høyere enn startøyeblikket:

assertFalse (duration.isNegative ());

Vi kan også få en Varighet objekt basert på flere tidsenheter, ved hjelp av metodene ofDays (), ofHours (), ofMillis (), ofMinutes (), ofNanos (), ofSeconds ():

Varighet fraDager = Duration.ofDays (1); assertEquals (86400, fromDays.getSeconds ()); Varighet fra minutter = Duration.ofMinutes (60);

Å lage en Varighet objekt basert på en tekstsekvens, må dette være av formen "PnDTnHnMn.nS":

Varighet fraChar1 = Duration.parse ("P1DT1H10M10.5S"); Varighet fraChar2 = Duration.parse ("PT10M");

En varighet kan konverteres til andre tidsenheter ved hjelp av toDays (), toHours (), toMillis (), toMinutes ():

assertEquals (1, fromMinutes.toHours ());

En varighetsverdi kan økes eller reduseres ved å bruke metoder i skjemaet plusX () eller minusX (), der X kan stå i dager, timer, millis, minutter, nano eller sekunder:

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

Vi kan også bruke i tillegg til() og minus() metoder med en parameter som spesifiserer TemporalUnit å legge til eller trekke fra:

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

4. Konklusjon

I denne opplæringen har vi vist hvordan vi kan bruke Periode og Varighet klasser.

Som alltid kan hele kildekoden til eksemplene finnes på GitHub.


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