1. Información general
En este tutorial, veremos formas de incrementar la fecha en un día usando Java. Antes de Java 8, las bibliotecas estándar de fecha y hora de Java no eran muy fáciles de usar. Por lo tanto, Joda-Time se convirtió en la biblioteca de fecha y hora estándar de facto para Java antes de Java 8.
También hay otras clases y bibliotecas que podrían usarse para realizar la tarea, como java.util.Calendar y Apache Commons.
Java 8 incluyó una mejor API de fecha y hora para abordar las deficiencias de sus bibliotecas más antiguas.
Por lo tanto, estamos viendo cómo incrementar la fecha en un día usando Java 8, Joda-Time API, la clase Calendar de Java y la biblioteca Apache Commons .
2. Dependencias de Maven
Las siguientes dependencias deben incluirse en el archivo pom.xml :
joda-time joda-time 2.10 org.apache.commons commons-lang3 3.5
Puede encontrar la última versión de Joda-Time en Maven Central, y también la última versión de Apache Commons Lang.
3. Usando java.time
La clase java.time.LocalDate es una representación de fecha y hora inmutable, a menudo vista como año-mes-día.
LocalDate tiene muchos métodos para la manipulación de fechas, veamos cómo podemos usarlo para realizar la misma tarea:
public static String addOneDay(String date) { return LocalDate .parse(date) .plusDays(1) .toString(); }
En este ejemplo, estamos usando la clase java.time.LocalDate y su método plusDays () para incrementar la fecha en un día.
Ahora, verifiquemos que este método esté funcionando como se esperaba:
@Test public void givenDate_whenUsingJava8_thenAddOneDay() throws Exception { String incrementedDate = addOneDay("2018-07-03"); assertEquals("2018-07-04", incrementedDate); }
4. Usando java.util.Calendar
Otro enfoque es usar java.util.Calendar y su método add () para incrementar la fecha.
Lo usaremos junto con java.text.SimpleDateFormat para fines de formato de fecha:
public static String addOneDayCalendar(String date) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.setTime(sdf.parse(date)); c.add(Calendar.DATE, 1); return sdf.format(c.getTime()); }
java.text.SimpleDateFormat está ahí para garantizar que se utilice el formato de fecha esperado. La fecha se incrementa mediante el método add () .
Una vez más, asegurémonos de que este enfoque funcione según lo previsto:
@Test public void givenDate_whenUsingCalendar_thenAddOneDay() throws Exception { String incrementedDate = addOneDayCalendar("2018-07-03"); assertEquals("2018-07-04", incrementedDate); }
5. Usando Joda-Time
La clase org.joda.time.DateTime tiene muchos métodos que ayudan a manejar correctamente la fecha y la hora.
Veamos cómo podemos usarlo para incrementar la fecha en un día:
public static String addOneDayJodaTime(String date) { DateTime dateTime = new DateTime(date); return dateTime .plusDays(1) .toString("yyyy-MM-dd"); }
Aquí, usamos la clase org.joda.time.DateTime y su método plusDays () para incrementar la fecha en un día.
Podemos verificar que el código anterior funciona con la siguiente prueba unitaria:
@Test public void givenDate_whenUsingJodaTime_thenAddOneDay() throws Exception { String incrementedDate = addOneDayJodaTime("2018-07-03"); assertEquals("2018-07-04", incrementedDate); }
6. Usando Apache Commons
Otra biblioteca comúnmente utilizada para la manipulación de fechas (entre otras cosas) es Apache Commons. Es un conjunto de utilidades que rodean el uso de los objetos java.util.Calendar y java.util.Date .
Para nuestra tarea, podemos usar la clase org.apache.commons.lang3.time.DateUtils y su método addDays () (tenga en cuenta que SimpleDateFormat se usa nuevamente para formatear la fecha):
public static String addOneDayApacheCommons(String date) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date incrementedDate = DateUtils .addDays(sdf.parse(date), 1); return sdf.format(incrementedDate); }
Como de costumbre, verificaremos los resultados con una prueba unitaria:
@Test public void givenDate_whenUsingApacheCommons_thenAddOneDay() throws Exception { String incrementedDate = addOneDayApacheCommons( "2018-07-03"); assertEquals("2018-07-04", incrementedDate); }
7. Conclusión
En este artículo rápido, analizamos varios enfoques para lidiar con una tarea simple de incrementar la fecha en un día. Hemos mostrado cómo se puede lograr utilizando las API principales de Java, así como algunas bibliotecas de terceros populares.
Los ejemplos de código utilizados en este artículo se pueden encontrar en GitHub.