Java - Operaciones con fechas

 
Vista:
Imágen de perfil de Jose
Val: 12
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Jose (7 intervenciones) el 11/04/2019 20:01:13
Buenas tardes, un saludo al foro.

Necesito realizar un programa en java que me permita mostrar en una tabla los datos
de una serie de personas que les falte un mes por vencense un cotrato de arrendamiento
Ya tengo elaborda la base de datos, la conexión a la misma y todos los módulos de
nuevos registros, consulta, modificación, etc. El detalle es cómo puedo hacer para elaborar
una rutina que:
-Recorra la base de datos y seleccione la fecha de arrendamiento.
-La compare con la fecha actual (fecha del sistema) y realice una diferencia entre ambas;
si la diferencia es igual o menor a 30 días, se debe mostrar una tabla con todos los registros en esa condición, es decir, seleccionar cada registro que tengan 30 dias o menos de vencerse y mostrarlos, los que no estén dentro del parámetro no se mostrarán.

¿Alguien podría darme una idea de cómo realizarlo?
Les agradezco sus aportes
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Billy Joel (876 intervenciones) el 11/04/2019 20:47:50
Podrías subir tu código a ver...
¿Que base de datos estás utilizando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 12
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Jose (7 intervenciones) el 12/04/2019 14:52:21
Estoy programando en java NetBeans, el gestor es PostgreSQL.

Codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Date fechaActual = new Date();
Date fechaRenov;
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String formatoFecha = null;
PreparedStatement ps;
Conexion cc = new Conexion();
cc.conectarBD();
String recorrer = "SELECT fec_venc FROM asegurados";
try{
    //String[] fechas = new String[1];
    long faltanDias;
    ps = cc.con.prepareStatement(recorrer);
    ResultSet rs = ps.executeQuery();
    //fechaRenov = formato.parse(formatoFecha);
    while (rs.next()){
       fechaRenov = rs.getDate("fec_venc");
       faltanDias = fechaRenov.getTime() - fechaActual.getTime();
       JOptionPane.showMessageDialog(null, faltanDias);
    }
 
} catch(SQLException s){
    JOptionPane.showMessageDialog(null, s);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 12
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Jose (7 intervenciones) el 12/04/2019 18:17:36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Date fechaActual = new Date();
Conexion cc = new Conexion();
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String formatoFecha = null;
PreparedStatement ps;
Date fechaRenov;
cc.conectarBD();
String recorrer = "SELECT * FROM clientes";
try{
    String[] fechas = new String[5];
    long faltanDias;
    ps = cc.con.prepareStatement(recorrer);
    ResultSet rs = ps.executeQuery();
    //fechaRenov = formato.parse(formatoFecha);
    while (rs.next()){
       fechaRenov = rs.getDate("fec_venc");
       faltanDias = fechaRenov.getTime() - fechaActual.getTime();
       if (faltanDias<=30){
            fechas[0] = rs.getString("nombre");
            fechas[1] = rs.getString("nro_contrato");
            fechas[2] = rs.getString("departamento");
            fechas[3] = rs.getString("fec_emision");
            fechas[4] = rs.getString("fec_venc");
            Polizas.modeloPolizas.addRow(fechas);
       }
    }
} catch(SQLException s){
    JOptionPane.showMessageDialog(null, s);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Billy Joel (876 intervenciones) el 12/04/2019 21:30:16
Antes que nada disculpas por la demora...
Parece que lo tienes bastante claro pero te hace falta algo para tenerlo correcto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Date fechaActual = new Date();
Conexion cc = new Conexion();
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String formatoFecha = null;
PreparedStatement ps;
Date fechaRenov;
 
cc.conectarBD ();
String recorrer = "SELECT * FROM clientes";
try{
    String[] fechas = new String[5];
    long faltanDias;
    ps = cc.con.prepareStatement(recorrer);
    ResultSet rs = ps.executeQuery();
    //fechaRenov = formato.parse(formatoFecha);
    while (rs.next()) {
        fechaRenov = rs.getDate("fec_venc");
        faltanDias = fechaRenov.getTime() - fechaActual.getTime();
        int diffDays = (int) (faltanDias / (24 * 60 * 60 * 1000));
        if (diffDays <= 30) {
            fechas[0] = rs.getString("nombre");
            fechas[1] = rs.getString("nro_contrato");
            fechas[2] = rs.getString("departamento");
            fechas[3] = rs.getString("fec_emision");
            fechas[4] = rs.getString("fec_venc");
            Polizas.modeloPolizas.addRow(fechas);
        }
    }
} catch(SQLException s){
    JOptionPane.showMessageDialog(null, s);
}

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 12
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Jose (7 intervenciones) el 12/04/2019 21:37:33
No te preocupes por la demora, al contrario Gracias por tu valioso aporte. No había tomado en cuenta ese detalle que mencionaste, solo que me sigue dando este error que muestro en la imagen adjunta


error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Billy Joel (876 intervenciones) el 12/04/2019 21:41:12
En cual línea?
sospecho que en esta
1
fechaRenov = rs.getDate("fec_venc");

Pero podrías cambiar o agregar lo siguiente en el catch
1
s.printStackTrace(System.out);

Y copias el error para ver la trama
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 12
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Jose (7 intervenciones) el 12/04/2019 21:59:43
El programa corre y me lanza el error que te mostré en la imagen y también creo que es en la línea que me indicas.
El catch me da la siguente info:

org.postgresql.util.PSQLException: Bad value for type timestamp/date/time: {1}
at org.postgresql.jdbc.TimestampUtils.parseBackendTimestamp(TimestampUtils.java:365)
at org.postgresql.jdbc.TimestampUtils.toTimestamp(TimestampUtils.java:396)
at org.postgresql.jdbc.TimestampUtils.toDate(TimestampUtils.java:520)
at org.postgresql.jdbc.PgResultSet.getDate(PgResultSet.java:498)
at org.postgresql.jdbc.PgResultSet.getDate(PgResultSet.java:2509)
at Infinity.Main.consPolizaActionPerformed(Main.java:224)
at Infinity.Main.access$600(Main.java:14)
at Infinity.Main$7.actionPerformed(Main.java:124)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:842)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:886)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.NumberFormatException: Expected time to be colon-separated, got '/'
at org.postgresql.jdbc.TimestampUtils.parseBackendTimestamp(TimestampUtils.java:267)
... 45 more
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Billy Joel (876 intervenciones) el 12/04/2019 22:23:28
Entonces es lo que sospechaba, pero vamos hacer trampa desde Postgre
Modificamos la consulta sql para obtener la fecha en el formato que podamos trabajar
SELECT nombre, nro_contrato, departamento, TO_CHAR(fec_emision :: DATE, 'dd/mm/yyyy'), TO_CHAR(fec_venc :: DATE, 'dd/mm/yyyy') FROM clientes

Lo he consultado de acá http://www.postgresqltutorial.com/postgresql-date/

Entonces con las fechas en un formato que podemos trabajar vamos a crear un método para transformar ese formato en objetos Date
1
2
3
4
5
6
7
8
9
10
private Date stringToDate(String date) {
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date d = null;
    try {
        d = sdf.parse(date);
    } catch (ParseException ex) {
        ex.printStackTrace(System.out);
    }
    return d;
}

Con ese método entonces el código finalmente quedaría así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Date fechaActual = new Date();
Conexion cc = new Conexion();
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String formatoFecha = null;
PreparedStatement ps;
Date fechaRenov;
 
cc.conectarBD();
//String recorrer = "SELECT * FROM clientes";
String recorrer = "SELECT nombre, nro_contrato, departamento, TO_CHAR(fec_emision :: DATE, 'dd/mm/yyyy'), TO_CHAR(fec_venc :: DATE, 'dd/mm/yyyy') FROM clientes";
 
try {
    String[] fechas = new String[5];
    long faltanDias;
    ps = cc.con.prepareStatement(recorrer);
    ResultSet rs = ps.executeQuery();
    //fechaRenov = formato.parse(formatoFecha);
    while (rs.next()) {
        fechaRenov = stringToDate(rs.getString(5));
        faltanDias = fechaRenov.getTime() - fechaActual.getTime();
        int diffDays = (int) (faltanDias / (24 * 60 * 60 * 1000));
        if (diffDays <= 30) {
//            fechas[0] = rs.getString("nombre");
//            fechas[1] = rs.getString("nro_contrato");
//            fechas[2] = rs.getString("departamento");
//            fechas[3] = rs.getString("fec_emision");
//            fechas[4] = rs.getString("fec_venc");
            fechas[0] = rs.getString(1);
            fechas[1] = rs.getString(2);
            fechas[2] = rs.getString(3);
            fechas[3] = rs.getString(4);
            fechas[4] = rs.getString(5);
            Polizas.modeloPolizas.addRow(fechas);
        }
    }
} catch (SQLException s) {
    JOptionPane.showMessageDialog(null, s);
}

Ejecutalo y cuentame...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Operaciones con fechas

Publicado por Jose Velazco (1 intervención) el 22/04/2019 14:20:49
Hermano... de verdad agradecido un mundo por tu ayuda, me sirvió de gran manera.

Gracias nuevamente por este gran aporte. Un abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 12
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Operaciones con fechas

Publicado por Jose (7 intervenciones) el 22/04/2019 16:02:46
Como dirian los Argentinos SOS GOSO. Hermano de verdad que muchísimas gracias, con ese "truco" funcionó lo que esperaba. De verdad muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar