Validando Datas

5 respostas
R

Como faço para validar um conteudo para saber se realmente é data??

Existe uma função para isso?

Grato.

Rodrigo MArini.

5 Respostas

E

kra essa classe vc so instancia joga no panel e pronto. Quando perde o foca ela valida a data e se for invalida envia mensagem e recupera o foco.
Qualquer duvida posta novamente.

/*
 * Created on 04/05/2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.jgenesis.swing;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jgenesis.swing.models.BeanTextDocument;

/**
 * JGDateTextField uses a date pattern to format and edit dates. 
 * The following characters can be specified (all mean 2-digit, except Y and S):
 * <code>
 *    d - day in month
 *    M - month in year
 *    y - year (2-digit)
 *    Y - year (4-digit)
 *    h - hour in day (00-23)
 *    m - minute in hour
 *    s - second in minute
 *    S - millisecond in second (3-digit)
 * </code>
 * Date pattern examples:
 * <code>
 *    d/M/Y
 *    d/M/y
 *    d/M/Y h:m:s
 * </code>
 */
public class JGDateTextField extends JGTextField {
	
	private static Log log = LogFactory.getLog(JGDateTextField.class);
    private String datePattern;
    private String dateFormatPattern;
    private boolean allowInvalidDate = false;

    public JGDateTextField() {
    	this(null);
    }

    public JGDateTextField(String datePattern) {
    	this.setDatePattern(datePattern);
    }
    
    public boolean validateInput() {
    	if (! allowInvalidDate && ! isEmpty()) {
        	// Não permitir datas que não preencham toda a máscara.
    		if (getText().trim().length() < dateFormatPattern.trim().length()) {
				handleInvalidDate();
        		return false;
    		}
        	
            try {
				document.getDateFormat().parse(getText());
			} catch (ParseException e) {
				handleInvalidDate();
				return false;
			}
    	}
        return super.validateInput();
    }

    void handleInvalidDate() {
		if (log.isInfoEnabled())
			log.info(getResourceBundle().getString("JGBaseTextField.messageInvalidDate") + getText());
		if (isShowValidationDialogs())
			JOptionPane.showMessageDialog(JGDateTextField.this, getResourceBundle().getString("JGBaseTextField.messageInvalidDate") + getText());
		else
			UIManager.getLookAndFeel().provideErrorFeedback(JGDateTextField.this);
    }
    
    private void processDatePattern(String datePattern) {
    	StringBuffer maskPattern = new StringBuffer();
    	StringBuffer dateFormatPattern = new StringBuffer();
    	
    	for (int i=0; i < datePattern.length(); i++) {
    		switch (datePattern.charAt(i)) {
    			case 'd':
    				maskPattern.append("99");
    				dateFormatPattern.append("dd");
    				break;
    			case 'M':
    				maskPattern.append("99");
    				dateFormatPattern.append("MM");
    				break;
    			case 'y':
    				maskPattern.append("99");
    				dateFormatPattern.append("yy");
    				break;
    			case 'Y':
    				maskPattern.append("9999");
    				dateFormatPattern.append("yyyy");
    				break;
    			case 'h':
    				maskPattern.append("99");
    				dateFormatPattern.append("HH");
    				break;
    			case 'm':
    				maskPattern.append("99");
    				dateFormatPattern.append("mm");
    				break;
    			case 's':
    				maskPattern.append("99");
    				dateFormatPattern.append("ss");
    				break;
    			case 'S':
    				maskPattern.append("999");
    				dateFormatPattern.append("SSS");
    				break;
    			default:
    				maskPattern.append(datePattern.charAt(i));
    				dateFormatPattern.append(datePattern.charAt(i));
					break;
			}
    	}
    	super.setMaskPattern(maskPattern.toString());
    	this.dateFormatPattern = dateFormatPattern.toString();
    }
    
	/**
	 * @return Returns the allowInvalidDate.
	 */
	public boolean isAllowInvalidDate() {
		return allowInvalidDate;
	}
	
	/**
	 * @param allowInvalidDate The allowInvalidDate to set.
	 */
	public void setAllowInvalidDate(boolean allowInvalidDate) {
		this.allowInvalidDate = allowInvalidDate;
	}
	
	/**
	 * @return Returns the datePattern.
	 */
	public String getDatePattern() {
		return datePattern;
	}
	
	/**
	 * @param datePattern The datePattern to set.
	 */
	public void setDatePattern(String datePattern) {
		this.datePattern = datePattern;
    	if (datePattern == null)
    		datePattern = getResourceBundle().getString("JGBaseTextField.defaultDatePattern");
    	processDatePattern(datePattern);
   		document.setDateFormat(SimpleDateFormat.getInstance());
   		((SimpleDateFormat)document.getDateFormat()).applyPattern(dateFormatPattern);
   		document.getDateFormat().setLenient(false);
		this.setText(getText());
	}
	
	public Object getValue() {
		Object value = null;
		if (this.document instanceof BeanTextDocument)
			value = ((BeanTextDocument)this.document).getValue();
		else
			try {
				value = document.getDateFormat().parse(getText());
			} catch (ParseException e) {
				log.debug(e);
			}
		return  value; 
	}

	public void setValue(Object value) {
		super.setValue(value instanceof String ? format((String) value) 
				: value != null ? document.getDateFormat().format(value) : "");
	}
	
	public void setMaskPattern(String maskPattern) {
		throw new UnsupportedOperationException("You cannot set a JGDateTextField maskPattern directly. Use setDatePattern(String datePattern) instead.");
	}

}
R

Muito show essa classe, porem eu uso struts e gostaria de saber como fazer uma validação simples pra jogar no meu form, isto é se o java oferecer…

Será que existe??

J

Se você converter a data para java.util.Date não serve?

ex.:

String str = "31/02/2006";

SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
try{
   Date data = formatador.parse(str);
}catch(ParseException pe){
   //data invalida
}
R

Acho que sim…vou tentar…Obrigadão!!!

Rodrigo.

R

Deu certo obrigado!

Criado 21 de agosto de 2006
Ultima resposta 23 de ago. de 2006
Respostas 5
Participantes 3