Datum verhogen in Java

1. Overzicht

In deze zelfstudie bekijken we manieren om de datum met één dag te verhogen met behulp van Java. Vóór Java 8 waren de standaard Java-datum- en tijdbibliotheken niet erg gebruiksvriendelijk. Daarom werd Joda-Time de de facto standaard datum- en tijdbibliotheek voor Java voorafgaand aan Java 8.

Er zijn ook andere klassen en bibliotheken die kunnen worden gebruikt om de taak uit te voeren, zoals java.util.Calendar en Apache Commons.

Java 8 bevatte een betere datum- en tijd-API om de tekortkomingen van zijn oudere bibliotheken aan te pakken.

Daarom kijken we naar hoe je de datum met één dag kunt verhogen met behulp van Java 8, Joda-Time API, Java's Kalender class en Apache Commons-bibliotheek.

2. Maven afhankelijkheden

De volgende afhankelijkheden moeten worden opgenomen in het pom.xml het dossier:

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

Je kunt de nieuwste versie van de Joda-Time vinden op Maven Central, en ook de nieuwste versie van Apache Commons Lang.

3. Met behulp van java.time

De java.time.LocalDate klasse is een onveranderlijke datum-tijdweergave, vaak gezien als jaar-maand-dag.

LocalDate heeft veel methoden voor datamanipulatie, laten we eens kijken hoe we het kunnen gebruiken om dezelfde taak te volbrengen:

openbare statische String addOneDay (String date) {return LocalDate .parse (datum) .plusDays (1) .toString (); }

In dit voorbeeld gebruiken we java.time.LocalDate klasse en zijn plusDays () methode om de datum met één dag te verhogen.

Laten we nu eens kijken of deze methode werkt zoals verwacht:

@Test public void givenDate_whenUsingJava8_thenAddOneDay () genereert uitzondering {String incrementedDate = addOneDay ("2018-07-03"); assertEquals ("2018-07-04", incrementedDate); }

4. Met behulp van java.util.Calendar

Een andere benadering is gebruiken java.util.Calendar en zijn toevoegen() methode om de datum te verhogen.

We zullen het samen met gebruiken java.text.SimpleDateFormat voor het formatteren van de datum:

openbare statische String addOneDayCalendar (String date) gooit ParseException {SimpleDateFormat sdf = nieuwe SimpleDateFormat ("jjjj-MM-dd"); Kalender c = Calendar.getInstance (); c.setTime (sdf.parse (datum)); c.add (Calendar.DATE, 1); retourneer sdf.format (c.getTime ()); }

java.text.SimpleDateFormat is er om ervoor te zorgen dat het verwachte datumnotatie wordt gebruikt. De datum wordt verhoogd via de toevoegen() methode.

Laten we er nogmaals voor zorgen dat deze aanpak werkt zoals bedoeld:

@Test openbare ongeldige gegevenDate_whenUsingCalendar_thenAddOneDay () genereert uitzondering {String incrementedDate = addOneDayCalendar ("2018-07-03"); assertEquals ("2018-07-04", incrementedDate); }

5. Joda-Time gebruiken

De org.joda.time.DateTime class heeft veel methoden die helpen om correct met datum en tijd om te gaan.

Laten we eens kijken hoe we het kunnen gebruiken om de datum met één dag te verhogen:

openbare statische String addOneDayJodaTime (String date) {DateTime dateTime = nieuwe DateTime (datum); return dateTime .plusDays (1) .toString ("jjjj-MM-dd"); }

Hier gebruiken we org.joda.time.DateTime klasse en zijn plusDays () methode om de datum met één dag te verhogen.

We kunnen verifiëren dat de bovenstaande code werkt met de volgende unit-test:

@Test openbare ongeldige gegevenDate_whenUsingJodaTime_thenAddOneDay () genereert uitzondering {String incrementedDate = addOneDayJodaTime ("2018-07-03"); assertEquals ("2018-07-04", incrementedDate); }

6. Met behulp van Apache Commons

Een andere bibliotheek die vaak wordt gebruikt voor datamanipulatie (onder andere) is Apache Commons. Het is een reeks hulpprogramma's die het gebruik van de java.util.Calendar en java.util.Date voorwerpen.

Voor onze taak kunnen we de org.apache.commons.lang3.time.DateUtils klasse en zijn addDays () methode (merk op dat SimpleDateFormat wordt weer gebruikt voor datumnotatie):

openbare statische String addOneDayApacheCommons (String date) gooit ParseException {SimpleDateFormat sdf = nieuwe SimpleDateFormat ("jjjj-MM-dd"); Datum incrementedDate = DateUtils .addDays (sdf.parse (datum), 1); retourneer sdf.format (incrementedDate); }

Zoals gewoonlijk verifiëren we de resultaten met een unit-test:

@Test openbare leegte gegevenDate_whenUsingApacheCommons_thenAddOneDay () genereert uitzondering {String incrementedDate = addOneDayApacheCommons ("2018-07-03"); assertEquals ("2018-07-04", incrementedDate); }

7. Conclusie

In dit korte artikel hebben we gekeken naar verschillende benaderingen van het omgaan met een eenvoudige taak om de datum met één dag te verhogen. We hebben laten zien hoe dit kan worden bereikt met behulp van Java's kern-API's en enkele populaire bibliotheken van derden.

De codevoorbeelden die in dit artikel worden gebruikt, zijn te vinden op GitHub.