Periode og varighed i Java

1. Oversigt

I denne hurtige vejledning skal vi se på to nye klasser til arbejde med datoer introduceret i Java 8: Periode og Varighed.

Begge klasser kan bruges til at repræsentere en tid eller bestemme forskellen mellem to datoer. Den væsentligste skelnen mellem de to klasser er, at Periode bruger dato-baserede værdier, mens Varighed bruger tidsbaserede værdier.

2. Periode Klasse

Det Periode klasse bruger enhederne år, måned og dag til at repræsentere en tidsperiode.

Vi kan få en Periode objekt som forskellen mellem to datoer ved hjælp af mellem() metode:

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

Derefter kan vi bestemme datoenhederne for perioden ved hjælp af metoderne getYears (), getMonths (), getDays ():

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

I dette tilfælde er isNegative () metode, som vender tilbage rigtigt hvis nogen af ​​enhederne er negative, kan det bruges til at bestemme, om slutdato er højere end start dato:

assertFalse (period.isNegative ());

Hvis isNegative () returnerer falsk, så bliver start dato er tidligere end slutdato værdi.

En anden måde at lave en Periode objekt er baseret på antallet af dage, måneder, uger eller år ved hjælp af dedikerede metoder:

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

Hvis kun en af ​​værdierne er til stede, f.eks. Ved hjælp af ofDays () metode, så er værdien af ​​de andre enheder 0.

I tilfælde af ofWeeks () metode bruges parameterværdien til at indstille antallet af dage ved at gange det med 7.

Det kan vi også lave en Periode objekt ved at analysere en tekstsekvens, som skal have formatet "PnYnMnD":

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

Periodens værdi kan øges eller formindskes ved hjælp af formularens metoder plusX () og minusX ()hvor X repræsenterer datoenheden:

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

3. Varighed Klasse

Det Varighed klasse repræsenterer et tidsinterval i sekunder eller nanosekunder og er bedst egnet til håndtering af kortere tid, i tilfælde der kræver mere præcision.

Vi kan bestemme forskellen mellem to øjeblikke som en Varighed objekt ved hjælp af mellem() metode:

Øjeblikkelig start = Instant.parse ("2017-10-03T10: 15: 30.00Z"); Øjeblikkelig afslutning = Øjeblikkelig.parse ("2017-10-03T10: 16: 30.00Z"); Varighed varighed = Varighed. Mellem (start, slut);

Så kan vi bruge getSeconds () eller getNanoseconds () metoder til at bestemme værdien af ​​tidsenhederne:

assertEquals (60, duration.getSeconds ());

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

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

Det isNegative () metode kan bruges til at verificere, om slut øjeblikket er højere end start øjeblikket:

assertFalse (duration.isNegative ());

Det kan vi også få en Varighed objekt baseret på flere tidsenhederved hjælp af metoderne ofDays (), ofHours (), ofMillis (), ofMinutes (), ofNanos (), ofSeconds ():

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

At oprette en Varighed objekt baseret på en tekstsekvens, dette skal have formen "PnDTnHnMn.nS":

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

En varighed kan konverteres til andre tidsenheder ved brug af toDays (), toHours (), toMillis (), toMinutes ():

assertEquals (1, fromMinutes.toHours ());

En varighedsværdi kan øges eller formindskes ved hjælp af metoder i formularen plusX () eller minusX (), hvor X kan stå i dage, timer, millis, minutter, nanoer eller sekunder:

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

Vi kan også bruge plus() og minus() metoder med en parameter, der specificerer TemporalUnit at tilføje eller trække fra:

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

4. Konklusion

I denne vejledning har vi vist, hvordan vi kan bruge Periode og Varighed klasser.

Som altid kan den fulde kildekode for eksemplerne findes på GitHub.