fechas - sumar dias a una fecha java calendar
¿Cómo puedo incrementar una fecha por un día en Java? (24)
java.time
En Java 8 y versiones posteriores, el paquete java.time lo hace prácticamente automático. ( Tutorial )
Asumiendo entrada y salida de String
:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
Estoy trabajando con una fecha en este formato: yyyy-mm-dd
.
¿Cómo puedo incrementar esta fecha en un día?
Algo como esto debería 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
Apache Commons ya tiene este DateUtils.addDays (Date date, int amount) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java.util.Date,%20int%29 que usa o puede usar JodaTime para hacerlo más limpio.
Apenas pase la fecha en Cadena y número de próximos días
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;
}
Construya un objeto Calendario y use el método add (Calendar.DATE, 1);
Desde Java 1.5 TimeUnit.DAYS.toMillis(1) parece más limpio.
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));
Eche un vistazo a Joda-Time ( http://joda-time.sourceforge.net/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
En Java 8 la forma más sencilla de hacerlo es:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
En java 8 puedes usar 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 el objeto java.util.Date
siguiente manera.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Puede formar LocalDate
en una cadena de la siguiente manera.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
Es muy simple, tratar de explicar en una palabra simple. obtener la fecha de hoy como abajo
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today''s date
calendar.add(Calendar.DATE, 1);
Ahora establezca un día con esta fecha por el método calendar.add que toma (constante, valor). Aquí la constante podría ser DATE, hours, min, sec etc. y value es el valor de constant. Al igual que para un día, la constante por delante es Calendar.DATE y su valor es 1 porque queremos un día por delante.
System.out.println(calendar.getTime());// print modified date which is
la fecha de mañana
Gracias
Java 8 agregó una nueva API para trabajar con fechas y horas.
Con Java 8 puedes usar 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);
Java parece estar muy por detrás de la bola ocho en comparación con C #. Este método de utilidad muestra la manera de hacerlo en Java SE 6 utilizando el método Calendar.add (presumiblemente la única forma 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, según la pregunta, llámelo 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);
Prefiero usar DateUtils de Apache. Consulte este http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . Es útil, especialmente cuando tiene que usarlo en múltiples lugares en su proyecto y no desea escribir su método de una sola línea para esto.
La API dice:
addDays (fecha de fecha, cantidad int): agrega un número de días a una fecha que devuelve un nuevo objeto.
Tenga en cuenta que devuelve un nuevo objeto Fecha y no realiza cambios en el anterior en sí.
Puede usar este paquete desde "org.apache.commons.lang3.time":
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date myNewDate = DateUtils.addDays(myDate, 4);
Date yesterday = DateUtils.addDays(myDate, -1);
String formatedDate = sdf.format(myNewDate);
Si desea agregar una sola unidad de tiempo y espera que también se incrementen otros campos, puede usar el método Agregar de forma segura. Vea el ejemplo a continuación:
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()));
Se imprimirá:
1970-12-31
1971-01-01
1970-12-31
Si está utilizando Java 8 , hágalo así.
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 , hazlo así.
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
Si está utilizando Java 8, java.time.LocalDate
y java.time.format.DateTimeFormatter
puede hacer que esto funcione bastante 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);
}
Tenga en cuenta que esta línea añade 24 horas:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
pero esta línea agrega un día
cal.add( Calendar.DATE, 1 );
¡En los días con un cambio de horario de verano (25 o 23 horas) obtendrá resultados diferentes!
Use la API DateFormat
para convertir la cadena en un objeto de fecha, luego use la API de Calendar
para agregar un día. Avíseme si desea ejemplos de código específicos y puedo actualizar mi respuesta.
puedes usar Simple java.util lib
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
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 de c.add(...)
podrían cambiarse de 1 a otro número para el incremento apropiado.
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Esto toma la cantidad de milisegundos desde la época de oldDate y agrega 1 día de milisegundos y luego usa el constructor público Date () para crear una fecha con el nuevo valor. Este método le permite agregar 1 día, o cualquier número de horas / minutos, no solo días completos.