[quote=ramilani12]Oras, é só inverter a expressão:
1º Exemplo: valida se o formato está dd/mm/yyyy
Pattern patter = Pattern.compile("(0[1-9]|[1-2][0-9]|3[0-1])/(0[1-9]|1[0-2])/\d{4}");
2º Exemplo valida se está neste formato: mm/dd/yyyy
Pattern patter = Pattern.compile("(0[1-9]|1[0-2])/(0[1-9]|[1-2][0-9]|3[0-1])/\d{4}");
(0[1-9]|[1-2][0-9]|3[0-1]) -> Aqui valida o dia com as seguintes ocorrências : 01 , 17 ou 31
(0[1-9]|1[0-2]) -> Aqui valida o mês com as seguintes ocorrências: 01 , 09 , 10 até 12
\d{4} -> Valida o ano 2009 , 2010 com tamanho limitado a 4, bom ira demorar um pouco até chegarmos no ano de 20001[/quote]
Entendi o que disse, mas como faço pra saber o formato da seguinte data: “12/12/2002”, é “dd/MM/yyyy” ou é “MM/dd/yyyy”?
Vou colocar a classe… assim fica mais fácil de entender o meu contexto:
[code]package testes;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TesteCalculaData {
private Map getFormatosPermitidos() {
Map mapa = new HashMap();
mapa.put( Pattern.compile( "(0[1-9]|[1-2][0-9]|3[0-1])/(0[1-9]|1[0-2])/\d{4}" ), "dd/MM/yyyy" );
mapa.put( Pattern.compile( "(0[1-9]|[1-2][0-9]|3[0-1])/(0[1-9]|1[0-2])/\d{2}" ), "dd/MM/yy" );
return mapa;
}
public String calculateDate( String sdate, int iamount, String stype ) {
SimpleDateFormat df = null;
Date date = null;
Map formatosPermitidos = getFormatosPermitidos();
Iterator iterator = formatosPermitidos.keySet().iterator();
Matcher match;
while( iterator.hasNext() ){
Pattern pattern = ( Pattern ) iterator.next();
match = pattern.matcher( sdate );
if ( match.matches() ){
df = new SimpleDateFormat( ( String ) formatosPermitidos.get( pattern ) );
df.setLenient( false );
try {
date = df.parse( sdate );
}
catch ( ParseException e ) {
//tratar depois...
e.printStackTrace();
}
break;
}
}
if ( date == null || df == null ) {
return "Deu erro na data: " + sdate;
// descomentar o codigo abaixo quando terminar a implementação
// throw new IllegalArgumentException( “Formato inválido!!!” );
}
GregorianCalendar gc = new GregorianCalendar();
gc.setTime( date );
if ( "DAY".equals( stype ) ) {
gc.add( Calendar.DAY_OF_MONTH, iamount );
}
else if ( "MONTH".equals( stype ) ) {
gc.add( Calendar.MONTH, iamount );
}
else {
gc.add( Calendar.YEAR, iamount );
}
String sformatDate = df.format( gc.getTime() );
return sformatDate;
}
public static void main( String[] args ) {
TesteCalculaData calulaData = new TesteCalculaData();
System.out.println( calulaData.calculateDate( "01/12/2008", 1, "DAY" ) );
System.out.println( calulaData.calculateDate( "01/12/08", 1, "DAY" ) );
System.out.println( calulaData.calculateDate( "28/02/2008", 1, "DAY" ) );
System.out.println( calulaData.calculateDate( "01/03/08", 1, "DAY" ) );
System.out.println( calulaData.calculateDate( "01/03/2004", 1, "MONTH" ) );
System.out.println( calulaData.calculateDate( "01/05/2006", -1, "MONTH" ) );
System.exit( 0 );
}
}
[/code]
Entende o que estou tentando explicar… não sei como fazer pra tratar essas situações…
[]s