Estoy trabajando con una fecha en este formato: yyyy-mm-dd
.
¿Cómo puedo incrementar esta fecha en un día?
Estoy trabajando con una fecha en este formato: yyyy-mm-dd
.
¿Cómo puedo incrementar esta fecha en un día?
Respuestas:
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
add()
rodará la fecha. Ver en ideone .
Java parece estar muy por detrás de la bola ocho en comparación con C #. Este método de utilidad muestra la forma de hacerlo en Java SE 6 usando 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 formulada, 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);
java.util.Date
, java.util.Calendar
y java.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .
En Java 8 y posterior, el paquete java.time lo hace más o menos automático. ( Tutorial )
Asumiendo String
entrada y salida:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTime
y OffsetDateTime
también tienen plusDays
y minusDays
métodos, así comoLocalDate
LocalDate
.
Prefiero usar DateUtils de Apache. Compruebe esto 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 línea única para esto.
La API dice:
addDays (fecha fecha, cantidad int): agrega una cantidad de días a una fecha que devuelve un nuevo objeto.
Tenga en cuenta que devuelve un nuevo objeto Date y no realiza cambios en el anterior.
Construya un objeto Calendario y use el método add (Calendar.DATE, 1);
Echa un vistazo a Joda-Time ( https://www.joda.org/joda-time/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Tenga en cuenta que esta línea agrega 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!
Java 8 agregó una nueva API para trabajar con fechas y horas.
Con Java 8 puede 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);
januaryFirst.plusDays(1)
no date.plusDays(1)
.
puedes usar Simple java.util lib
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
java.util.Date
, java.util.Calendar
y java.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .
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 dará la fecha de mañana. c.add(...)
los parámetros podrían cambiarse de 1 a otro número para un incremento apropiado.
Date
o Calendar
nuevo.
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 desea usar SimpleDateFormat , hágalo 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
LocalDate
clase no LocalDateTime
.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Esto toma el número 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 usando el nuevo valor. Este método le permite agregar 1 día, o cualquier cantidad de horas / minutos, no solo días completos.
Desde Java 1.5 TimeUnit.DAYS.toMillis (1) me 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));
LocalDate
clase en las clases java.time para Java 8 y posteriores, y el puerto posterior a Java 6 y Java 7 que se encuentra en el proyecto ThreeTen-Backport .
En Java 8, la forma más sencilla de hacerlo es:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
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 java.util.Date
objeto de la siguiente manera.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Puede formatear 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 de la siguiente manera
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Ahora establezca un día antes con esta fecha por el método calendar.add que toma (constante, valor). Aquí constante podría ser FECHA, horas, minutos, segundos, etc. y el valor es el valor de la constante. Al igual que para un día, la constante por delante es Calendar.DATE y su valor es 1 porque queremos un valor por delante de un día.
System.out.println(calendar.getTime());// print modified date which is
la fecha de mañana
Gracias
Apache Commons ya tiene este DateUtils.addDays (Fecha fecha, cantidad int) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date,% 20int% 29 que utilizas o puedes utilizar JodaTime para hacerlo más limpio.
Simplemente pase la fecha en Cadena y el número de días siguientes
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;
}
Si desea agregar una sola unidad de tiempo y espera que también se incrementen otros campos, puede usar el método de agregar de manera segura. Ver 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()));
Imprimirá:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
clase mal diseñada y anticuada en 2019.
Si usa Java SE 8 o superior, debe usar la nueva API de fecha / hora
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
, puede usar este método.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Si está utilizando una versión anterior a Java SE 8, le aconsejo que use Joda-Time
Joda-Time proporciona un reemplazo de calidad para las clases de fecha y hora de Java y es la biblioteca de fecha y hora estándar de facto para Java anterior a 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);
java.time
pieza es incorrecto. Debería ser dd/MM/uuuu
equivalente al JodaTime one.
Use la DateFormat
API para convertir la Cadena en un objeto Fecha, luego use la Calendar
API para agregar un día. Avíseme si desea ejemplos de código específicos y puedo actualizar mi respuesta.
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);
}
toString()
para producir el formato de cadena i aaaa-MM-dd (y si insiste, recuerde que mm
son minutos mientras MM
es el mes).
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);
Date
clases en 2018 es un mal consejo. Las antiguas clases problemáticas de fecha y hora, como java.util.Date
, java.util.Calendar
y java.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y Java 9. Consulte el Tutorial de Oracle . Ver otras respuestas usando la LocalDate
clase.
SimpleDateFormat
clase desafortunadamente inyecta una zona horaria, aplicando implícitamente la zona predeterminada actual de la JVM. Por lo tanto, los resultados de este código variarán según el valor predeterminado actual, y ese valor predeterminado puede cambiar en cualquier momento durante el tiempo de ejecución.
Es simple en realidad. Un día contiene 86400000 milisegundos. Entonces, primero obtiene la hora actual en milis del Sistema usando System.currentTimeMillis()
luego agregue 84000000 milisegundos y use elDate
Clase para generar un formato de fecha A para los milisegundos.
Ejemplo
String Today = new Date(System.currentTimeMillis()).toString();
String Today será 2019-05-9
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow será 2019-05-10
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String Day AfterTommorow será 2019-05-11
Date
clase terrible que fue reemplazada hace años por las clases modernas java.time . Tanto es más fácil de usar, simplemente:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
Aclaremos el caso de uso: desea hacer aritmética de calendario y comenzar / finalizar con java.util.Date .
Algunos enfoques:
Considere usar java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
con las clases modernas de java.time como Instant
. Las clases java.time suplantan completamente las clases heredadas. Específicamente, Instant
reemplaza java.util.Date
.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
viene Mon May 01 16:25:33 CEST 2017
. Sin embargo, sigue siendo una solución desanimada. No solo el método está en desuso por una buena razón, también en 2017 tenemos muy buenas alternativas a la Date
clase.