Foros del Web » Programación para mayores de 30 ;) » Java »

Problemas de fechas

Estas en el tema de Problemas de fechas en el foro de Java en Foros del Web. Buenas: tengo una tabla con un campo date, en el que quiero insertar la fecha del sistema cada vez que inserto un registro. Para ello ...
  #1 (permalink)  
Antiguo 30/10/2008, 13:02
 
Fecha de Ingreso: septiembre-2003
Mensajes: 51
Antigüedad: 20 años, 7 meses
Puntos: 0
Problemas de fechas

Buenas: tengo una tabla con un campo date, en el que quiero insertar la fecha del sistema cada vez que inserto un registro. Para ello utilizo:
Date fechaCreacion = new Date(); El problema que tengo es que fechaCreación tiene el valor Thu Oct 30 19:58:10 CET 2008 y cuando lo intento insertar a través de un EJB no lo consigo pues el formato que aparece en la bbdd derby es 31-oct-2008. Como puedo solventar este problema? os agradecería ayuda pues me juego un proyecto de fin de curso. Gracias.
  #2 (permalink)  
Antiguo 30/10/2008, 19:58
 
Fecha de Ingreso: mayo-2007
Mensajes: 210
Antigüedad: 17 años
Puntos: 8
Respuesta: Problemas de fechas

Como estas insertando en la BDD pon el codigo de la parte de insertar para tener una idea mas clara

salu2
  #3 (permalink)  
Antiguo 31/10/2008, 09:55
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Problemas de fechas

Como te comentan, no deberías tener problemas para añadir un objeto Date a través de sql.Date y un procedimiento almacenado.

Si tu gestor de base de datos lo que espera es una cadena formateada, hazlo con: SimpleDateFormat.
  #4 (permalink)  
Antiguo 31/10/2008, 10:52
 
Fecha de Ingreso: septiembre-2003
Mensajes: 51
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: Problemas de fechas

Script de bbdd:

create table PROYECTOS
(
IDPROYECTO bigint generated by default as identity (START WITH 1, INCREMENT BY 1) primary key,
NOMBREPROYECTO VARCHAR(64) not null,
CREACIONPROYECTO DATE not null,
INICIOPROYECTO DATE not null,
FINPROYECTO DATE not null
);

Todos los campos son rescatados de un jsp y llevados a un servlet:

DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRANCE);
String nombreproyecto = request.getParameter("nombreProyecto");
Date fechaInicio = df.parse(request.getParameter("diaInicio") + "/" + request.getParameter("mesInicio") + "/" + request.getParameter("anoInicio"));
Date fechaFin = df.parse(request.getParameter("diaFin") + "/" + request.getParameter("mesFin") + "/" + request.getParameter("anoFin"));
Date fechaCreacion = new Date();

y los mando a un bean de sesion:

proyectosBean.insertar(nombreproyecto, fechaInicio, fechaFin, fechaCreacion);

el contenido del bean de sesion:

package sesion;

import entidad.Proyectos;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
public class ProyectosBean implements ProyectosRemote {
@PersistenceContext
private EntityManager em;

public List buscarProyecto(String nombreproyecto) {
Query q = em.createNamedQuery("Proyectos.findByNombreproyect o");
q.setParameter("nombreproyecto", nombreproyecto);
return q.getResultList();
}

public void insertar(String nombreproyecto, Date fechaInicio, Date fechaFin, Date fechaCreacion) {
Proyectos a = new Proyectos();
a.setNombreproyecto(nombreproyecto);
a.setInicioproyecto(fechaInicio);
a.setFinproyecto(fechaFin);
a.setCreacionproyecto(fechaCreacion);
persist(a);
}

public void persist(Object object) {
em.persist(object);
}
}

Y el bean de entidad:

package entidad;

import java.io.Serializable;
import java.util.Date;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.transaction.UserTransaction;

@Entity
@Table(name = "PROYECTOS")
@NamedQueries({@NamedQuery(name = "Proyectos.findByIdproyecto", query = "SELECT p FROM Proyectos p WHERE p.idproyecto = :idproyecto"), @NamedQuery(name = "Proyectos.findByNombreproyecto", query = "SELECT p FROM Proyectos p WHERE p.nombreproyecto = :nombreproyecto"), @NamedQuery(name = "Proyectos.findByCreacionproyecto", query = "SELECT p FROM Proyectos p WHERE p.creacionproyecto = :creacionproyecto"), @NamedQuery(name = "Proyectos.findByInicioproyecto", query = "SELECT p FROM Proyectos p WHERE p.inicioproyecto = :inicioproyecto"), @NamedQuery(name = "Proyectos.findByFinproyecto", query = "SELECT p FROM Proyectos p WHERE p.finproyecto = :finproyecto")})
public class Proyectos implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "IDPROYECTO", nullable = false)
private Long idproyecto;
@Column(name = "NOMBREPROYECTO", nullable = false)
private String nombreproyecto;
@Column(name = "CREACIONPROYECTO", nullable = false)
@Temporal(TemporalType.DATE)
private Date creacionproyecto;
@Column(name = "INICIOPROYECTO", nullable = false)
@Temporal(TemporalType.DATE)
private Date inicioproyecto;
@Column(name = "FINPROYECTO", nullable = false)
@Temporal(TemporalType.DATE)
private Date finproyecto;



y no funciona. Creía que era por el campo idProyecto, por lo que lo hice asi;

Class.forName("org.apache.derby.jdbc.ClientDriver" );
Connection c = DriverManager.getConnection("jdbc:derby://localhost:1527/Proyecto", "admin", "admin");
PreparedStatement ps1 = c.prepareStatement("INSERT INTO PROYECTOS VALUES (DEFAULT, ?,?,?,?)");
ps1.setString(1, nombreproyecto);
ps1.setString(2, fechaInicio);
ps1.setString(3, fechaFin);
ps1.setString(4, fechaCreacion);
ps1.executeUpdate();

Y nada de nada. ¿que está mal?
  #5 (permalink)  
Antiguo 31/10/2008, 11:10
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Problemas de fechas

EL campo SQL DATE es para fechas sin hora, lo que nosotros llamamos el día, si quieres guardar día y hora, el campo ha de ser del tipo TIMESTAMP.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:24.