Estoy trabajando con una fecha en este formato: yyyy-mm-dd.

¿Cómo puedo incrementar esta fecha un día?

  • Si usted está usando Java 8 o posterior, puede utilizar la nueva fecha/hora de la api. Ver esta respuesta: stackoverflow.com/a/23910924/1115554
  • new DateTime().plusDays(1).hasta la fecha() ???
InformationsquelleAutor user48094 | 2009-01-09

28 Comentarios

  1. 662

    Algo como esto debe hacer el truco:

    String dt = "2008-01-01";  //Start date
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar c = Calendar.getInstance();
    c.setTime(sdf.parse(dt));
    c.add(Calendar.DATE, 1);  //number of days to add
    dt = sdf.format(c.getTime());  //dt is now the new date
    • c.rollo(Calendario.FECHA, true); sería un poco mejor, para mayor claridad.
    • c.rollo(Calendario.FECHA, true) no rodar el mes en el último día del mes.
    • eso es una mala idea si usted no entiende una cosa
    • Voy a citar algunos de los JavaDocs… Calendario.FECHA: «…Este es un sinónimo de DAY_OF_MONTH.» Deseo que los JavaDocs para aclarar que este incremento campos más grandes (como el mes y el año). Calendario.rollo «, Añade o resta (arriba/abajo) de una sola unidad de tiempo sobre el tiempo de duración de campo sin necesidad de cambiar los campos de mayores» .. de Nuevo, «los campos de mayores» es vago, pero que parece coherente con Sam comentario. Me gustaría que hubiera una StackOverflow para la fijación de la edad de los JavaDocs.
    • Tenga en cuenta que ahora muchos Date métodos están en desuso, y Calendar se debe utilizar en lugar de Date de todos modos.
    • "yyyy-MM-dd" Observar meses tiene que estar en mayúsculas. "mm" daría minutos :).
    • en groovy (idioma) simplemente sería la Fecha.parse(«yyyy-MM-dd», myDateStr).next()
    • chicos, lamentablemente, es bastante inútil para agregar días, utilizando la FECHA, DAY_OF_MONTH o incluso DAY_OF_YEAR – todos ellos son incrementados por el módulo. Así que teniendo en cuenta el Calendario de 31-12-1970, agregar(DAY_OF_YEAR, 1) o rollo(), sin embargo rollo() finalmente llamadas add(), dará 01-01-1970. Supongo que la única forma correcta es para ajustar la hora con milisegundos. En cuanto a mí, yo nunca voy a usar el Calendario de la clase de nuevo.
    • Usted está mal. add() va el rollo de la fecha. Ver en ideone.
    • Me gustaría añadir una cosa importante: asegúrese de que la zona horaria de SimpleDateFormat y el Calendario son el mismo. Yo estaba inadvertidamente utiliza UTC como la zona horaria de la SimpleDateFormat, pero fue el uso de un local en la zona horaria para el objeto Calendario. UTC no observa el horario de verano, pero mi zona horaria local hace. Por eso, cuando me incrementa el calendario el día 1 en la Primavera, cuando nos «pierde» una hora, hora UTC grabado ganando 23 horas — y, por tanto, en el mismo día. Por lo tanto el algoritmo anterior se utiliza el mismo día «2012-03-11» dos veces. Lo opuesto ocurre en el Otoño, y el día «2012-11-04» se omitiría.
    • Por eso echo de menos c#. Algo tan simple como conseguir UTC fecha o añadir días a la fecha de hoy, tiene muchas líneas de código. Total edad de la piedra de la biblioteca.
    • En la moderna Java: LocalDate.parse( "2017-01-23" ).plusDays( 1 ).toString()
    • Si yo soy la adición de 1 día hasta el último día del mes, el mes sigue siendo el mismo, en lugar de pasar al siguiente mes, cómo hacer que funcione ?
    • FYI, el terriblemente molesto antiguo de la fecha y la hora de las clases, tales como java.util.Date, java.util.Calendar, y java.text.SimpleDateFormat ahora legado, suplantado por el de java.tiempo clases construido en Java 8 y versiones posteriores. Consulte Tutorial Oracle.

  2. 203

    Java no parece estar muy por detrás de los ocho bolas en comparación con C#. Este método de utilidad muestra la manera de hacerlo en Java SE 6 el uso de la Calendario.método add (es de suponer que el único camino fácil).

    public class DateUtil
    {
        public static Date addDays(Date date, int days)
        {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.DATE, days); //minus number would decrement the days
            return cal.getTime();
        }
    }

    Para agregar un día, por la pregunta, llame a esto de la siguiente manera:

    String sourceDate = "2012-02-29";
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Date myDate = format.parse(sourceDate);
    myDate = DateUtil.addDays(myDate, 1);
    • FYI, el terriblemente molesto antiguo de la fecha y la hora de las clases, tales como java.util.Date, java.util.Calendar, y java.text.SimpleDateFormat ahora legado, suplantado por el de java.tiempo clases construido en Java 8 y versiones posteriores. Consulte Tutorial Oracle.
  3. 73

    java.tiempo

    En Java 8 y versiones posteriores, el java.paquete de tiempo hace esto más o menos automática. (Tutorial)

    Suponiendo String de entrada y de salida:

    import java.time.LocalDate;
    
    public class DateIncrementer {
      static public String addOneDay(String date) {
        return LocalDate.parse(date).plusDays(1).toString();
      }
    }
    • FYI, tanto ZonedDateDateTime y OffsetDateTime también han plusDays y minusDays métodos así como LocalDate
    • Seguro, pero la información disponible en la pregunta es que de un LocalDate.
    • Yep. Sólo la adición de enlaces para que los lectores de la edificación. No una crítica.
  4. 64

    Yo prefiero usar DateUtils de Apache. Marque esta http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html. Es útil sobre todo cuando tienes que usar varios lugares en su proyecto y no quisiera escribir su forro método para esto.

    La API dice:

    addDays(Fecha, int cantidad) : Añade un número de días a una fecha de la devolución de un nuevo objeto.

    Nota que devuelve un nuevo objeto Date y no hacer cambios a la anterior sí mismo.

  5. 57
    SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
    Calendar cal = Calendar.getInstance();
    cal.setTime( dateFormat.parse( inputString ) );
    cal.add( Calendar.DATE, 1 );
  6. 42

    Echar un vistazo a la Joda-Time (https://www.joda.org/joda-time/).

    DateTimeFormatter parser = ISODateTimeFormat.date();
    
    DateTime date = parser.parseDateTime(dateString);
    
    String nextDay = parser.print(date.plusDays(1));
    • Usted puede quitar el analizador de llamadas para la construcción de la DateTime. Usar DateTime fecha = new DateTime(dateString); Luego, nextDay es ISODateTimeFormat.fecha().de impresión(la fecha.plusDays(1)); Ver joda-time.sourceforge.net/api-release/org/joda/time/… para más información.
    • Para obtener más detallado código de ejemplo utilizando Joda Tiempo, consulte mi respuesta a una pregunta similar, ¿Cómo agregar un día a la fecha?.
    • FYI… La Joda-Time proyecto se encuentra ahora en modo de mantenimiento, y asesora de la migración a la java.tiempo clases. Ambos esfuerzos fueron dirigidos por el mismo hombre, Stephen Colebourne. Así que compartir conceptos similares, y la migración no es difícil.
  7. 40

    Java 8 se añadió una nueva API para trabajar con fechas y horas.

    Con Java 8 puede utilizar las siguientes líneas de código:

    //parse date from yyyy-mm-dd pattern
    LocalDate januaryFirst = LocalDate.parse("2014-01-01");
    
    //add one day
    LocalDate januarySecond = januaryFirst.plusDays(1);
    • Supongo que usted quiere januaryFirst.plusDays(1) no date.plusDays(1).
    • Esto sólo es compatible con android O developer.android.com/reference/java/time/package-summary.html
    • Para Android, antes del 26, consulte el ThreeTenABP proyecto que se adapta a ThreeTen-Backport proyecto, un puerto si la mayoría de la java-tiempo la funcionalidad de Java 6 y Java 7.
  8. 39

    Por favor, tenga en cuenta que esta línea añade 24 horas:

    d1.getTime() + 1 * 24 * 60 * 60 * 1000

    pero esta línea añade un día

    cal.add( Calendar.DATE, 1 );

    Los días con un horario de ahorro de luz de cambio (25 o 23 horas), usted obtendrá resultados diferentes!

  9. 27

    puede utilizar java Simple.util lib

    Calendar cal = Calendar.getInstance(); 
    cal.setTime(yourDate); 
    cal.add(Calendar.DATE, 1);
    yourDate = cal.getTime();
    • Esta Respuesta se duplica el contenido de las Respuestas múltiples, incluyendo la aceptó Responder desde hace tres años. Por favor, elimine su Respuesta o editar para agregar valor.
    • esta respuesta es más limpio, no analizar la fecha en el medio. la «aceptado respuesta» es muy complicado. es bueno agregó el tuyo, el desprecio de albahaca automatizado de observación
    • FYI, el terriblemente molesto antiguo de la fecha y la hora de las clases, tales como java.util.Date, java.util.Calendar, y java.text.SimpleDateFormat ahora legado, suplantado por el de java.tiempo clases construido en Java 8 y versiones posteriores. Consulte Tutorial Oracle.
  10. 23
    Date today = new Date();               
    SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");            
    Calendar c = Calendar.getInstance();        
    c.add(Calendar.DATE, 1);  //number of days to add      
    String tomorrow = (String)(formattedDate.format(c.getTime()));
    System.out.println("Tomorrows date is " + tomorrow);

    Esto le dará la fecha de mañana. c.add(...) parámetros podría ser cambiado de 1 a otro número para el correspondiente incremento.

    • puedes hacer algo como c.setTime(objeto Date) para establecer una Fecha específica antes de añadir.
    • Me gustaría que el defecto de los paquetes de java haría el manejo de fechas menos enrevesado… me refiero a que es un dolor cada vez que usted quiere tratar con las fechas… una diatriba…
    • El java.tiempo clases construido en Java 8 y más tarde a suplantar a la terrible edad de la fecha-hora de clases, y responder a su deseo. También back trasladado a Java 6/7 & las versiones anteriores de Android en el ThreeTen-Backport y ThreeTenABP de los proyectos. No hay necesidad de utilizar jamás Date o Calendar de nuevo.
  11. 18

    Si usted está usando Java 8, a continuación, hacerlo como este.

    LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27);  //Source Date
    LocalDate destDate = sourceDate.plusDays(1); //Adding a day to source date.
    
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //Setting date format
    
    String destDate = destDate.format(formatter));  //End date

    Si quieres usar SimpleDateFormat, a continuación, hacerlo como este.

    String sourceDate = "2017-05-27";  //Start date
    
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(sdf.parse(sourceDate)); //parsed date and setting to calendar
    
    calendar.add(Calendar.DATE, 1);  //number of days to add
    String destDate = sdf.format(calendar.getTime());  //End date
    • No, la Pregunta para una fecha valor solo no es una fecha-hora. A fin de utilizar el LocalDate clase no LocalDateTime.
    • respuesta actualizada por favor consulte.
    • Su Respuesta se repite el contenido de al menos otros cuatro Respuestas. Por favor explique cómo el tuyo agrega valor más allá de los que, o bien eliminar antes de recoger abajo de los votos.
  12. 15
    long timeadj = 24*60*60*1000;
    Date newDate = new Date (oldDate.getTime ()+timeadj);

    Este toma el número de milisegundos transcurridos desde la época de oldDate y agrega 1 día la pena de milisegundos, a continuación, utiliza la Fecha de() public constructor para crear una fecha con el nuevo valor. Este método le permite añadir de 1 día, o cualquier número de horas/minutos, no sólo los días completos.

    • Esto probablemente no es lo OP quería; no tiene ningún subsidio por Ahorro de Luz de día-tipo de ajustes, salto segundos y así sucesivamente.
    • Ahorro de luz de día debe ser manejado por la zona horaria/configuración regional. Mi ejemplo se muestra cómo un incremento de pequeña duración. Cuando por el incremento de los días, los segundos intercalares puede ser un problema, pero cuando la adición de horas, es menos probable aunque posible.
  13. 14

    Desde Java 1.5 TimeUnit.DÍAS.toMillis(1) se ve más limpia a mí.

    SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
    Date day = dateFormat.parse(string);
    //add the day
    Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));
    • Esto crea una fecha-valor de tiempo donde la Pregunta pide una fecha única. Sugiero mucho más sabio enfoque es el LocalDate de la clase en java.el tiempo de las clases de Java 8 y versiones posteriores, y en el puerto de Java 6 & Java 7 se encuentra en el ThreeTen-Backport proyecto.
  14. 11

    En java 8 se puede utilizar java.time.LocalDate

    LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
    LocalDate addedDate = parsedDate.plusDays(1);   //Add one to the day field

    Puede convertir en java.util.Date objeto de la siguiente manera.

    Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

    Puede formiato LocalDate en una Cadena de la siguiente manera.

    String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  15. 10

    Es muy simple, tratando de explicar en una simple palabra.
    obtener la fecha de hoy como a continuación

    Calendar calendar = Calendar.getInstance();
    System.out.println(calendar.getTime());//print today's date
    calendar.add(Calendar.DATE, 1);

    Establecer ahora un día antes que con esta fecha en el calendario.agregar método que toma (constante, valor). Aquí constante podría ser de FECHA, hora, min, seg, etc. y el valor es el valor de la constante. Como para un día, por delante constante es el Calendario.La FECHA y su valor es de 1, porque queremos un día de anticipación valor.

    System.out.println(calendar.getTime());//print modified date which is la fecha de mañana

    Gracias

  16. 7

    Acaba de pasar la fecha en la Cadena y el número de días de

     private String getNextDate(String givenDate,int noOfDays) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Calendar cal = Calendar.getInstance();
            String nextDaysDate = null;
        try {
            cal.setTime(dateFormat.parse(givenDate));
            cal.add(Calendar.DATE, noOfDays);
    
           nextDaysDate = dateFormat.format(cal.getTime());
    
        } catch (ParseException ex) {
            Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
        dateFormat = null;
        cal = null;
        }
    
        return nextDaysDate;
    
    }
  17. 7

    Si quieres añadir una sola unidad de tiempo y se espera que otros campos se incrementa así, usted puede usar el método de adición. Véase el siguiente ejemplo:

    SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
    Calendar cal = Calendar.getInstance();
    cal.set(1970,Calendar.DECEMBER,31);
    System.out.println(simpleDateFormat1.format(cal.getTime()));
    cal.add(Calendar.DATE, 1);
    System.out.println(simpleDateFormat1.format(cal.getTime()));
    cal.add(Calendar.DATE, -1);
    System.out.println(simpleDateFormat1.format(cal.getTime()));

    Va A Imprimir:

    1970-12-31
    1971-01-01
    1970-12-31
    • Hay no aceptó la respuesta y sentí que había confusión general si otros campos se actualizan así.
  18. 5

    Utilizar el DateFormat API para convertir la Cadena en un objeto Date, a continuación, utilizar la Calendario API para añadir un día. Déjeme saber si usted desea específicos, ejemplos de código, y puedo actualizar mi respuesta.

  19. 5

    Si el uso de Java SE 8 o mayor, se debe utilizar el nuevo Fecha/Hora de la API

     int days = 7;       
     LocalDate dateRedeemed = LocalDate.now();
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
    
     String newDate = dateRedeemed.plusDays(days).format(formatter);   
     System.out.println(newDate);

    Si debe convertir de java.util.Date a java.time.LocalDate, usted podría usar este método.

      public LocalDate asLocalDate(Date date) {
          Instant instant = date.toInstant();
          ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
          return zdt.toLocalDate();
      }

    Si usted está usando una versión anterior de Java SE 8 te aconsejo utilizar Joda-El Tiempo

    Joda-Time ofrece un recambio de calidad para la Java de fecha y hora
    clases y es el estándar de facto en la fecha y hora de la biblioteca de Java
    antes de Java SE 8

       int days = 7;       
       DateTime dateRedeemed = DateTime.now();
       DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/uuuu");
    
       String newDate = dateRedeemed.plusDays(days).toString(formatter);   
       System.out.println(newDate);
    • Su patrón para el java.time parte es incorrecta. Debe ser dd/MM/uuuu a ser equivalente a la JodaTime uno.
  20. 3

    Si usted está usando Java 8, java.time.LocalDate y java.time.format.DateTimeFormatter puede hacer este trabajo muy simple.

    public String nextDate(String date){
          LocalDate parsedDate = LocalDate.parse(date);
          LocalDate addedDate = parsedDate.plusDays(1);
          DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
          return addedDate.format(formatter); 
    }
    • Aún más sencillo: Colocar el formateador y sólo tiene que utilizar toString() para producir la cadena i aaaa-MM-dd formato (y si insisten, recuerde que mm minutos mientras MM es el mes).
  21. 3

    Usted puede utilizar este paquete de «org.apache.commons.lang3.tiempo»:

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
     Date myNewDate = DateUtils.addDays(myDate, 4);
     Date yesterday = DateUtils.addDays(myDate, -1);
     String formatedDate = sdf.format(myNewDate);  
    • Lo que sugiere Date clase en el 2018 es buenos consejos. La problemática de edad de fecha y hora de las clases, tales como java.util.Date, java.util.Calendar, y java.text.SimpleDateFormat ahora legado, suplantado por el java.tiempo clases construido en Java 8 & Java 9. Consulte Tutorial Oracle. Ver otras Respuestas utilizando LocalDate clase.
    • Sí, lo es, LocalDate ES la mejor manera de hacerlo,
    • sin embargo, algunos frameworks jsf tiene un poco de problemas de integración con la API de tiempo de lo que a veces debe utilizar la Fecha; además de entorno de java < 8
    • La mayoría de las java.tiempo de la funcionalidad de back-portado a Java 6 & 7 en el ThreeTen-Backport proyecto. Adaptado para Android más antiguos en ThreeTenABP proyecto. Así que, realmente no hay necesidad de tocar esas sangrientas horrible viejo fecha y la hora de clases. Muchos marcos han sido actualizados. Pero no todas. Así que si usted debe interactuar con el viejo código aún no se han actualizado a java.tiempo, escriba el nuevo código en el java.tiempo y convertir a la antigua tipos llamando a nuevos métodos de conversión añadido a la edad, las clases.
    • Este código omite la problema crucial de la zona horaria. Para un momento dado, la fecha varía en todo el globo por la zona. El SimpleDateFormat clase lamentablemente inyecta una zona horaria, de forma implícita la aplicación de la JVM actual de la zona predeterminada. De modo que los resultados de este código va a variar, por lo que la corriente de defecto es — y que por defecto se puede cambiar en cualquier momento cuando tiempo de ejecución.
  22. 3
    startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
    • Gracias por querer aportar. Sin embargo, esto ya está en varias de las otras respuestas, por lo que realmente veo ningún punto… Aparte de que en mi humilde opinión, nadie debería utilizar el mal diseñado y largo obsoletos Calendar clase en 2019.
  23. 2

    Vamos a aclarar el caso de uso: Usted quiere hacer el calendario de la aritmética y de inicio/final con un java.util.Fecha.

    Algunos de los enfoques:

    1. Convertir a string y la espalda con SimpleDateFormat: Esta es una solución ineficaz.
    2. Convertir a LocalDate: Usted podría perder cualquier hora del día a la información.
    3. Convertir a LocalDateTime: se trata de pasos más, y usted tiene que preocuparse acerca de la zona horaria.
    4. Convertir a la época con Fecha.getTime(): es eficiente, pero está calculando con milisegundos.

    Considerar el uso de java.tiempo.Instantánea:

    Date _now = new Date();
    Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
    Date _newDate = Date.from(_instant);
    • Nunca mezcle el terrible legado de las clases, tales como Date con la moderna java.tiempo clases como Instant. El java.tiempo clases totalmente suplantar el legado de clases. Específicamente, Instant reemplaza java.util.Date.
    • no abordar la Cuestión. está utilizando clases que representan un momento (una fecha con la hora del día en el contexto de un desplazamiento o de la zona). Pero la Pregunta acerca de la fecha sin la hora del día y sin zona horaria. Consulte Respuesta correcta por Sobral y Respuesta correcta por micha.
  24. 2

    Es simple en realidad.
    Un día contiene 86400000 milisegundos.
    Así que lo primero es obtener el tiempo actual en millis Del Sistema mediante el uso deSystem.currentTimeMillis(), a continuación,
    agregar el 84000000 milisegundos y el uso de la Date Clase para generar Un formato de fecha para el milisegundos.

    Ejemplo

    String Today = new Date(System.currentTimeMillis()).toString();

    Cadena el día de Hoy será 2019-05-9

    String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();

    Cadena Tommorow será 2019-05-10

    String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();

    Cadena DayAfterTommorow será 2019-05-11

    • Este código utiliza el terrible Date clase que fue suplantado años por la moderna java.tiempo clases. Mucho más sencillo de utilizar simplemente: LocalDate.parse( "2019-01-23" ).plusDays( 1 )
    • esto funciona muy bien
  25. 0
    Date newDate = new Date();
    newDate.setDate(newDate.getDate()+1);
    System.out.println(newDate);
    • fyi, la Fecha.setDate() está en desuso
    • En mi ordenador parece que funciona a través de un mes de la frontera. Después de Sun Apr 30 16:25:33 CEST 2017 viene Mon May 01 16:25:33 CEST 2017. Es todavía un desanimado solución, aunque. No sólo es el método obsoleto por una buena razón, también en 2017, tenemos muy buenas alternativas para el Date clase.

Dejar respuesta

Please enter your comment!
Please enter your name here