Saltar al contenido

¿Cómo agregar días a java.sql.date?

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.GregorianCalendary 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 GregorianCalendary 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 ) ;

Tabla de tipos de fecha y hora en Java (tanto heredado como moderno) y en SQL estándar


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, YearQuartery más.

Agradecemos que desees corroborar nuestra faena añadiendo un comentario o puntuándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *