Periode en duur in Java

1. Overzicht

In deze korte tutorial gaan we twee nieuwe klassen bekijken voor het werken met datums die zijn geïntroduceerd in Java 8: Periode en Looptijd.

Beide klassen kunnen worden gebruikt om een ​​hoeveelheid tijd weer te geven of om het verschil tussen twee datums te bepalen. Het belangrijkste onderscheid tussen de twee klassen is dat Periode gebruikt op datum gebaseerde waarden, while Looptijd gebruikt op tijd gebaseerde waarden.

2. Periode Klasse

De Periode class gebruikt de eenheden jaar, maand en dag om een ​​tijdsperiode weer te geven.

We kunnen een Periode object als het verschil tussen twee datums door de tussen() methode:

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

Vervolgens kunnen we de datumeenheden van de periode bepalen met behulp van de methoden getYears (), getMonths (), getDays ():

LOG.info ("Jaren:" + period.getYears () + "maanden:" + period.getMonths () + "dagen:" + period.getDays ());

In dit geval is het isNegative () methode, die terugkeert waar als een van de eenheden negatief is, kan worden gebruikt om te bepalen of de einddatum is hoger dan de startdatum:

assertFalse (period.isNegative ());

Als isNegative () geeft false terug, dan de startdatum is eerder dan de einddatum waarde.

Een andere manier om Maak een Periode object is gebaseerd op het aantal dagen, maanden, weken of jaren met behulp van speciale methoden:

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

Als er maar één van de waarden aanwezig is, bijvoorbeeld door de ofDays () methode, dan is de waarde van de andere eenheden 0.

In het geval van de van weken () methode, wordt de parameterwaarde gebruikt om het aantal dagen in te stellen door het met 7 te vermenigvuldigen.

We kunnen ook Maak een Periode object door een tekstreeks te ontleden, die het formaat "PnYnMnD" moet hebben:

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

De waarde van de periode kan worden verhoogd of verlaagd met behulp van methoden van het formulier plusX () en min X (), waarbij X staat voor de datumeenheid:

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

3. Looptijd Klasse

De Looptijd class staat voor een tijdsinterval in seconden of nanoseconden en is het meest geschikt voor het verwerken van kortere hoeveelheden tijd, in gevallen die meer precisie vereisen.

We kunnen het verschil tussen twee momenten bepalen als een Looptijd object met behulp van de tussen() methode:

Instant start = Instant.parse ("2017-10-03T10: 15: 30.00Z"); Instant end = Instant.parse ("2017-10-03T10: 16: 30.00Z"); Duur duur = Duur.tussen (begin, einde);

Dan kunnen we de getSeconds () of getNanoseconds () methoden om de waarde van de tijdseenheden te bepalen:

assertEquals (60, duration.getSeconds ());

Als alternatief kunnen we een Duration-instantie verkrijgen van twee LocalDateTime-instanties:

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

De isNegative () methode kan worden gebruikt om te controleren of het eindmoment hoger is dan het startmoment:

assertFalse (duration.isNegative ());

We kunnen ook verkrijg een Looptijd object op basis van verschillende tijdseenheden, met behulp van de methoden ofDays (), ofHours (), ofMillis (), ofMinutes (), ofNanos (), ofSeconds ():

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

Om een Looptijd object gebaseerd op een tekstreeks, dit moet de vorm "PnDTnHnMn.nS" hebben:

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

Een duur kan worden omgezet naar andere tijdseenheden gebruik makend van toDays (), toHours (), toMillis (), toMinutes ():

assertEquals (1, fromMinutes.toHours ());

Een duurwaarde kan worden verhoogd of verlaagd met behulp van methoden van het formulier plusX () of min X (), waar X dagen, uren, millis, minuten, nanos of seconden kan staan:

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

We kunnen ook de plus() en minus() methoden met een parameter die de TemporalUnit optellen of aftrekken:

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

4. Conclusie

In deze zelfstudie hebben we laten zien hoe we de Periode en Looptijd klassen.

Zoals altijd is de volledige broncode van de voorbeelden te vinden op GitHub.