Si te encuentras con algo que te causa duda puedes dejarlo en los comentarios y te ayudaremos lo más rápido posible.
Solución:
Calendar#getTime
devuelve un java.util.Date
representación de la Calendar
. Realmente necesitas usar Calendar#getTimeInMillis
en lugar de
java.sql.Date startDate= new java.sql.Date(c.getTimeInMillis())
import java.sql.Date;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;
public class Test
public static void main(String a[])
java.sql.Date todaysDate = new java.sql.Date(new java.util.Date().getTime());
int futureDay =1;
int pastDay=2;
java.sql.Date futureDate = this.addDays(todaysDate, futureDay);
java.sql.Date pastDate = this.subtractDays(todaysDate, pastDay);
System.out.println("futureDate =>>> " + futureDate);
System.out.println("pastDate =>>> " + pastDate);
public static Date addDays(Date date, int days)
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, days);
return new Date(c.getTimeInMillis());
public static Date subtractDays(Date date, int days)
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
return new Date(c.getTimeInMillis());
tl; dr
Nunca uses las terribles clases heredadas java.sql.Date
, java.util.Calendar
, java.util.GregorianCalendar
y java.util.Date
. Usar unicamente java.tiempo clases
¿Cómo agrego 1 día a java.sql.Date logicalDate?
Convertir de clase heredada java.sql.Date
a la clase moderna java.time.LocalDate
. Luego llame plus…
/minus…
métodos para sumar/restar días, semanas, meses o años.
myJavaSqlDate.toLocalDate().plusDays( 1 )
si se le da un Calendar
eso es en realidad un GregorianCalendar
y solo quiere la fecha, convierta a ZonedDateTime
y extraer un LocalDate
.
( (GregorianCalendar) myCal ) // Cast from general `Calendar` to more concrete class `GregorianCalendar`.
.toZonedDateTime() // Convert from the legacy class to the modern `ZonedDateTime` class replacement.
.toLocalDate() // Extract the date only, omitting the time-of-day and the time zone.
.plusWeeks( 1 ) // Returns a `LocalDate` object, a date without a time-of-day and without a time zone.
java.tiempo
El mal diseñado java.sql.Date
clase fue suplantada hace años por la moderna java.tiempo clases con la adopción unánime de JSR 310. Evite Calendar
clase también.
Recupere de su base de datos con JDBC 4.2 llamando ResultSet::getObject
.
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
Añade una semana llamando LocalDate::plusWeeks
.
LocalDate weekLater = ld.plusWeeks( 1 ) ;
Escribir en la base de datos llamando PreparedStatement::setObject
.
myPreparedStatement.setObject( … , weekLater ) ;
Lo mejor es evitar por completo las problemáticas clases heredadas de fecha y hora. Pero si necesitas un java.sql.Date
objeto de interoperar con el código antiguo aún no actualizado para java.tiempo, use nuevos métodos de conversión agregados a las clases antiguas. Específicamente, java.sql.Date.valueOf
.
java.sql.Date d = java.sql.Date.valueOf( ld ) ;
Sobre java.tiempo
los java.tiempo framework está integrado en Java 8 y versiones posteriores. Estas clases reemplazan a las antiguas y problemáticas clases heredadas de fecha y hora, como java.util.Date
, Calendar
& SimpleDateFormat
.
Para obtener más información, consulte la Tutorial de oráculo. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
los Joda-Tiempo El proyecto, ahora en modo de mantenimiento, aconseja la migración a las clases java.time.
puedes intercambiar java.tiempo objetos directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cuerdas, no hay necesidad de java.sql.*
clases
¿Dónde obtener las clases java.time?
- Java SE 8, Java SE 9, Java SE 10, Java SE 11y posteriores: parte de la API de Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y Java SE 7
- La mayoría de java.tiempo la funcionalidad está adaptada a Java 6 y 7 en ThreeTen-Backport.
- Androide
- Versiones posteriores de implementaciones de paquetes de Android del java.tiempo clases
- Para Android anterior (<26), el TresDiezABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo usar ThreeTenABP….
los ThreeTen-Extra proyecto extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y más.
Agradecemos que desees corroborar nuestra faena añadiendo un comentario o puntuándolo te estamos agradecidos.