Forøgelsesdato i Java

1. Oversigt

I denne vejledning ser vi på måder at øge datoen på en dag ved hjælp af Java. Før Java 8 var standard Java-dato- og tidsbibliotekerne ikke særlig brugervenlige. Derfor blev Joda-Time de facto standarddato- og tidsbiblioteket for Java forud for Java 8.

Der er også andre klasser og biblioteker, der kan bruges til at udføre opgaven, som f.eks java.util.Kalender og Apache Commons.

Java 8 inkluderede en bedre dato og klokkeslæt API til at løse manglerne i dets ældre biblioteker.

Derfor ser vi på hvordan man øger datoen med en dag ved hjælp af Java 8, Joda-Time API, Java's Kalender klasse og Apache Commons-bibliotek.

2. Maven-afhængigheder

Følgende afhængigheder skal medtages i pom.xml fil:

  joda-time joda-time 2.10 org.apache.commons commons-lang3 3.5 

Du kan finde den nyeste version af Joda-Time på Maven Central og også den nyeste version af Apache Commons Lang.

3. Brug java.tid

Det java.time.LocalDate klasse er en uforanderlig repræsentation af dato og tid, ofte betragtet som år-måned-dag.

LocalDate har mange metoder til dato manipulation, lad os se, hvordan vi kan bruge det til at udføre den samme opgave:

offentlig statisk String addOneDay (String date) {return LocalDate .parse (date) .plusDays (1) .toString (); }

I dette eksempel bruger vi java.time.LocalDate klasse og dens plusDays () metode til at øge datoen med en dag.

Lad os nu kontrollere, at denne metode fungerer som forventet:

@Test offentlig ugyldighed givenDate_whenUsingJava8_thenAddOneDay () kaster undtagelse {String incrementedDate = addOneDay ("03/07/2018"); assertEquals ("04.07.2018", incrementedDate); }

4. Brug java.util.Kalender

En anden tilgang bruger java.util.Kalender ogdet er tilføje() metode til at øge datoen.

Vi bruger det sammen med java.text.SimpleDateFormat til datoformatering:

offentlig statisk streng addOneDayCalendar (strengdato) kaster ParseException {SimpleDateFormat sdf = ny SimpleDateFormat ("åååå-MM-dd"); Kalender c = Calendar.getInstance (); c.setTime (sdf.parse (dato)); c.add (Kalender.DATO, 1); returner sdf.format (c.getTime ()); }

java.text.SimpleDateFormat er der for at sikre, at det forventede datoformat bruges. Datoen øges via tilføje() metode.

Lad os endnu en gang sørge for, at denne tilgang fungerer som beregnet:

@Test offentlig ugyldighed givenDate_whenUsingCalendar_thenAddOneDay () kaster undtagelse {String incrementedDate = addOneDayCalendar ("2018-07-03"); assertEquals ("04.07.2018", incrementedDate); }

5. Brug af Joda-Time

Det org.joda.time.DateTime klasse har mange metoder, der hjælper med at håndtere dato og klokkeslæt korrekt.

Lad os se, hvordan vi kan bruge den til at øge datoen en dag:

offentlig statisk String addOneDayJodaTime (String date) {DateTime dateTime = new DateTime (date); return dateTime .plusDays (1) .toString ("åååå-MM-dd"); }

Her bruger vi org.joda.time.DateTime klasse og dens plusDays () metode til at øge datoen med en dag.

Vi kan verificere, at koden ovenfor fungerer med følgende enhedstest:

@Test offentlig ugyldighed givenDate_whenUsingJodaTime_thenAddOneDay () kaster undtagelse {String incrementedDate = addOneDayJodaTime ("03/07/2018"); assertEquals ("04.07.2018", incrementedDate); }

6. Brug Apache Commons

Et andet bibliotek, der almindeligvis anvendes til datemanipulation (blandt andet), er Apache Commons. Det er en række hjælpeprogrammer, der omgiver brugen af java.util.Kalender og java.util.Date genstande.

Til vores opgave kan vi bruge org.apache.commons.lang3.time.DateUtils klasse og dens addDays () metode (bemærk, at SimpleDateFormat bruges igen til datoformatering):

offentlig statisk String addOneDayApacheCommons (String dato) kaster ParseException {SimpleDateFormat sdf = ny SimpleDateFormat ("åååå-MM-dd"); Date incrementedDate = DateUtils .addDays (sdf.parse (dato), 1); returner sdf.format (incrementedDate); }

Som sædvanligt verificerer vi resultaterne med en enhedstest:

@Test offentlig ugyldighed givenDate_whenUsingApacheCommons_thenAddOneDay () kaster undtagelse {String incrementedDate = addOneDayApacheCommons ("2018-07-03"); assertEquals ("04.07.2018", incrementedDate); }

7. Konklusion

I denne hurtige artikel kiggede vi på forskellige tilgange til at håndtere en simpel opgave at øge datoen med en dag. Vi har vist, hvordan det kan opnås ved hjælp af Java's centrale API'er samt nogle populære tredjepartsbiblioteker.

Kodeprøverne, der bruges i denne artikel, kan findes på GitHub.