Erro com data: Unparseable - RESOLVIDO

5 respostas
hpsjr

Caros,
tenho um sistema para gerar relatórios que utiliza um método pra retornar a próxima sexta ou domingo.
Executando localmente no windows ele está funcionando, porém quando é executado num servidor linux ele retorna a mensagem de erro Erro: diaSemana.getProxDomingoSegunda:Unparseable date: “20/12/2009”. Alguém poderia ajudar a resolver este problema.
Segue o código abaixo:

// BUSCA A DATA DA PRÓXIMO SEXTA-FEIRA E DO PRÓXIMO DOMINGO;	
	public static ArrayList  getProxSextaDomingo(String stDt, String dia) { 
		java.util.ArrayList retorno=new ArrayList();
		int soma=0;
		int diaMes=0, mes=0, ano=0;
		String diaM="0";
	    try {  
	    	DateFormat dtFormat = DateFormat.getDateInstance();   
	        Date dtFormated = dtFormat.parse(stDt);   
	        Calendar cal = new GregorianCalendar();
	        Calendar calUltimo = new GregorianCalendar();
	        Calendar calPrimeiroProxSemana = new GregorianCalendar();
	        cal.setTime(dtFormated);   
	        int dayOfWeek = cal.get(java.util.Calendar.DAY_OF_WEEK);  
	        if (dayOfWeek == 1){   
	           //Domingo
	           soma=5;
	        }
	        if (dayOfWeek == 2){   
	           //Segunda-Feira;
	           soma=4;
	        }
	        if (dayOfWeek == 3){  
	           //Terça-Feira;
	            soma=3;
	        }
	        if (dayOfWeek == 4){  
	           //Quarta-Feira;
	            soma=2;
	        }
	        if (dayOfWeek == 5){   
	          //Quinta-Feira;
	           soma=1;
	        }
	        if (dayOfWeek == 6){  
	          //Sexta-Feira;
	           soma=7;
	         }
	         if (dayOfWeek == 7){  
	           //Sábado;
	           soma=6;
	         }
	         calUltimo.setTime(dtFormated);
	         calPrimeiroProxSemana.setTime(dtFormated);
	         calUltimo.add(Calendar.DAY_OF_MONTH, soma);
	         calPrimeiroProxSemana.add(Calendar.DAY_OF_MONTH, soma+2);
	         
	         if(dia.equals("DOMINGO")){
	        	 diaMes=calPrimeiroProxSemana.get(java.util.Calendar.DAY_OF_MONTH);
	        	 if(diaMes<10){
	        		 diaM="0"+diaMes;
	        	 }else{
	        		 diaM=String.valueOf(diaMes);
	        	 }
	        	 mes=calPrimeiroProxSemana.get(java.util.Calendar.MONTH)+1;
	        	 ano=calPrimeiroProxSemana.get(java.util.Calendar.YEAR);
	        	 retorno.add(diaM +"/"+mes+"/"+ano);
	        	 retorno.add(mes+"/"+ano);
	         }else{
	        	 diaMes=calUltimo.get(java.util.Calendar.DAY_OF_MONTH);
	        	 if(diaMes<10){
	        		 diaM="0"+diaMes;
	        	 }else{
	        		 diaM=String.valueOf(diaMes);
	        	 }
	        	 mes=calUltimo.get(java.util.Calendar.MONTH)+1;
	        	 ano=calUltimo.get(java.util.Calendar.YEAR);
	        	 retorno.add(diaM+"/"+mes+"/"+ano);
	        	 retorno.add(String.valueOf(mes)+"/"+ano);
	         }
	      } catch (Exception e) { 
	    	 Mail.mailConfirmacao("getProxSextaDomingo - Erro: diaSemana.getProxDomingoSegunda:" + e.getMessage());
	    	 System.out.println("Erro: diaSemana.getProxDomingoSegunda:" + e);  
	         return retorno;
	      } 
	         return retorno;
    }

Grato.

5 Respostas

mario.fts

Verifique qual o idioma do servidor linux. se for ingles (bem provável) a data está no formato mm/dd/yyyy, e é por isso que está dando esse erro.

Vc vai ter que forçar o Locale pra br antes de fazer o parse:

DateFormat dtFormat = DateFormat.getDateInstance(DateFormat.Long ,new Locale ("pt", "BR"));
hpsjr

Olá mario.fts ,
agradeço desde já pela ajuda.
Fiz a modificação sugerida porém o erro continua o mesmo.

mario.fts:
Verifique qual o idioma do servidor linux. se for ingles (bem provável) a data está no formato mm/dd/yyyy, e é por isso que está dando esse erro.

Vc vai ter que forçar o Locale pra br antes de fazer o parse:

DateFormat dtFormat = DateFormat.getDateInstance(DateFormat.Long ,new Locale ("pt", "BR"));
Poneis123

o stDt que vc recebe de parametro é a data em formato String? caso seja faça a seguinte correção no seu dateFormat:

DateFormat dtFormat = new SimpleDateFormat("dd/MM/yyyy"); Date dtFormated = dtFormat.parse(stDt);

Testa ae…

Att,

hpsjr

Poneis123,
valeu pela dica, o valor que eu passo por parâmetro é a data.
Executei no servidor e relatório rodou normalmente.

Poneis123:
o stDt que vc recebe de parametro é a data em formato String? caso seja faça a seguinte correção no seu dateFormat:

DateFormat dtFormat = new SimpleDateFormat("dd/MM/yyyy"); Date dtFormated = dtFormat.parse(stDt);

Testa ae…

Att,

Poneis123

blzura! se funcionou corretamente, faz um favor, edita o seu primeiro post da pagina e adiciona ao fim do assunto um [RESOLVIDO]

Precisando é só falar
Valew!

Criado 21 de dezembro de 2009
Ultima resposta 22 de dez. de 2009
Respostas 5
Participantes 3