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

Problema al validar fecha

Estas en el tema de Problema al validar fecha en el foro de Java en Foros del Web. Buenas, Para validar una fecha uso lo siguiente: Código: private String cFecha = "01/05/2005"; ... private SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy"); ... this.formatoFecha.setLenient(false); ... this.formatoFecha.parse( ...
  #1 (permalink)  
Antiguo 11/10/2005, 02:25
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Problema al validar fecha

Buenas,

Para validar una fecha uso lo siguiente:

Código:
private String cFecha = "01/05/2005";
...
private SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
...
this.formatoFecha.setLenient(false);
...
this.formatoFecha.parse( cadena );
valida perfectamente que una fecha sea válida (años bisiestos, meses con días que no tienen)... pero al introducir una fecha como "01/01/001" la transforma en "01/01/0001" ... ¿cómo evitarlo?
  #2 (permalink)  
Antiguo 12/10/2005, 11:43
Avatar de hugo777  
Fecha de Ingreso: enero-2002
Ubicación: Lima, Perú
Mensajes: 757
Antigüedad: 22 años, 3 meses
Puntos: 1
Hola, porque no validas entonces la longitud de tu cadena antes de llamarla desde el format...
__________________
Saludos,

H@C..
  #3 (permalink)  
Antiguo 12/10/2005, 13:36
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Buenas,

Eso lo pensé pero no sirve, porque el que la longitud de la cadena sea correcta no significa que el año no sea algo como "0001" :(

Al final me he creado un modelo específico para las fechas.

Gracias por la respuesta!
  #4 (permalink)  
Antiguo 11/02/2009, 15:57
 
Fecha de Ingreso: febrero-2009
Mensajes: 1
Antigüedad: 15 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Problema al validar fecha

soy nueva en java sin embargo me parece un gran lenguaje de programación con lo poco q sé!!! la pregunta de MikiBroki es un poco vieja sin embargo investigando en google como validar fechas me encontre con este foro y decidi registrarme para mostrar la solucion q encontre al trabajar con fechas y registrarlas... espero les sirva a muchos q se encuentren con este problemita:

trabaje con una ventana llamada gaceta en donde tenía q registrar la fecha en la que fue aprobada para guardarla en la base de datos y me diseñe este codigo guiandome por el diseño con MVC(MODELO VISTA CONTROLADOR),sin embargo lo q les interesará es solo el controlador y la vista para que vean el funcionamiento de la validación de fechas usando JComboBox:
Vista:
package vista;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import controlador.ControlGaceta;


public class Gaceta extends JDialog{

private static final long serialVersionUID = 1L;

private JTextField txtTipoPago,txtBusq,txtNumGaceta;
private JButton btnGuard,btnLimpiar;
private JLabel lbl1,lbl2,lbl3;
private JComboBox cbDia=null,cbMes=null,cbAño=null;

public Gaceta(int x, int y){
ControlGaceta controlador= new ControlGaceta(this);
this.setLayout(null);

// Label
lbl1=new JLabel("Nº de Gaceta:");
lbl1.setBounds(25,35,90,20);
this.add(lbl1);

lbl2=new JLabel("Fecha Aprob:");
lbl2.setBounds(180,35,90,20);
this.add(lbl2);

lbl3=new JLabel("Registro");
lbl3.setBorder(new javax.swing.border.BevelBorder(javax.swing.border. SoftBevelBorder.RAISED));
lbl3.setHorizontalAlignment(SwingConstants.CENTER) ;
lbl3.setBounds(0,0,500,20);
this.add(lbl3);


//Jtexfields
txtNumGaceta=new JTextField();
txtNumGaceta.setBounds(105,35,40,20);
this.add(txtNumGaceta);

//JComboBox Fecha

cbDia=new JComboBox();
cbDia.addItem("Dia:");
cbDia.setBounds(265,35,50,20);
this.add(cbDia);
controlador.llenaDia(31);
cbDia.addActionListener(controlador);

String[] meses = {"Mes:","Enero","Febrero","Marzo","Abril","Mayo ",
"Junio","Julio","Agosto","Septiembre","Octubre ",
"Noviembre","Diciemrbre"};

cbMes=new JComboBox(meses);
cbMes.setBounds(322,35,90,20);
this.add(cbMes);
cbMes.addActionListener(controlador);

cbAño=new JComboBox();
cbAño.addItem("Año:");
cbAño.setBounds(420,35,60,20);
this.add(cbAño);
controlador.llenaAño();
cbAño.addActionListener(controlador);

//botones

btnGuard= new JButton("Guardar");
btnGuard.setBounds(120,90, 80, 20);
btnGuard.addActionListener(controlador);
this.add(btnGuard);

btnLimpiar= new JButton("Limpiar");
btnLimpiar.setBounds(230,90, 80, 20);
btnLimpiar.addActionListener(controlador);
this.add(btnLimpiar);

this.setTitle(" Gaceta");
this.setBounds(x/3,y/6,500,180);
this.setResizable(false);
this.setModal(true);
this.setVisible(true);
}

public void Limpiar(){
this.txtTipoPago.setText("");
}

public final JTextField getTxtTipoPago() {
return txtTipoPago;
}

public final void setTxtTipoPago(JTextField txtTipoPago) {
this.txtTipoPago = txtTipoPago;
}

public final JTextField getTxtBusq() {
return txtBusq;
}

public final void setTxtBusq(JTextField txtBusq) {
this.txtBusq = txtBusq;
}

public final JTextField getTxtNumGaceta() {
return txtNumGaceta;
}

public final void setTxtNumGaceta(JTextField txtNumGaceta) {
this.txtNumGaceta = txtNumGaceta;
}

public final JButton getBtnGuard() {
return btnGuard;
}

public final JButton getBtnLimpiar() {
return btnLimpiar;
}


public final JComboBox getDia() {
return cbDia;
}

public final JComboBox getMes() {
return cbMes;
}

public final JComboBox getAño() {
return cbAño;
}

}


Controlador: aqui manejamos el metodo que verifica si el año es bisiesto
package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import vista.Gaceta;

public class ControlGaceta implements ActionListener {

Gaceta vista;

public ControlGaceta(Gaceta vista){
this.vista=vista;
}

public void actionPerformed(ActionEvent e) {
if(e.getSource()==vista.getMes()||e.getSource()==v ista.getAño()){
String mes=vista.getMes().getSelectedItem().toString();
if(mes.equals("Abril")||mes.equals("Junio")||mes.e quals("Septiembre")||mes.equals("Noviembre"))
this.llenaDia(30);
else if(mes.equals("Enero")||mes.equals("Marzo")||mes.e quals("Mayo")||mes.equals("Julio")||mes.equals("Ag osto")||mes.equals("Octubre")||mes.equals("Diciemb re"))
this.llenaDia(31);
else if(mes.equals("Febrero")){
if(esBisiesto(Integer.valueOf(vista.getAño().getSe lectedItem().toString())))
this.llenaDia(29);
else
this.llenaDia(28);
}
}
}
public boolean esBisiesto(int anio)
{
return((anio%4==0 && anio%100 !=0)||(anio%400==0));
}

public void llenaAño(){
Calendar cal= Calendar.getInstance();
int i=0;
for(i=1990;i<=cal.get(Calendar.YEAR);i++){
vista.getAño().addItem(i);
}
vista.getAño().setSelectedItem(i-1);
}

public void llenaDia(int limite){
for(int i=1;i<=limite;i++){
vista.getDia().addItem(i);
}
}
}


//porfa comenten su opinion... o mejoras
  #5 (permalink)  
Antiguo 12/02/2009, 01:31
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Problema al validar fecha

Teniendo en cuenta que el último mensaje del tema es de octubre del 2005... no se yo si todavía estará en actualidad .
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 12/02/2009, 03:41
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Respuesta: Problema al validar fecha

Sea como sea se agradecen nuevas alternativas aunque no ando ahora con Java cuando tengo un rato lo probaré, seguro que a alguien más sirve, gracias
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 01:07.