SimpleDateFormat está errado?[RESOLVIDO]

9 respostas
E

Bom dia Pessoal, não está voltando o formato certo… gostaria de uma ajuda…

SimpleDateFormat formatador1 = new SimpleDateFormat("dd/MM/yyyy");
		SimpleDateFormat formatador2 = new SimpleDateFormat("yyyy/MM/dd");
		Date date1;
		String dat = "2004/4/20";
		
		try {
			date1 = formatador1.parse(dat);
			
			System.out.print(formatador1.format(date1));
			
		} catch (Exception e) {
			// TODO: handle exception
		}

o que volta é:

25/09/0025

desde já agradeço.

9 Respostas

E
date1 = formatador1.parse(dat);

Era para ser formatador2 no código acima. Pois este é que possui o mesmo padrão da String dat.

E

obrigado mesmo pela ajuda. Mas o que quero e tanto tranforma a data que usuario digitou para o banco de dados como quero pegar a data e mostrar no formato certo ao usuario final

String dat = "2004/4/20";  

Tranforma para usuario final pegnado do Banco de Dados String dat1 = "20/04/2004"
Tranforma para usuario final e colocar no Banco de Dados que  aceita desta forma String dat1 = "2004/04/20"

a ideia e essa.  peguei varios tutorial mas não entendi ainda como usar Date, e SimplesDataFomat.....
E
A conversão é feita da mesma forma, independente do padrão do SimpleDateFormat. O método format recebe um Date como parâmetro e retorna uma String no formato especificado, já o método parse interpreta uma String de acordo com o padrão e retorna um Date equivalente.
SimpleDateFormat formatador1 = new SimpleDateFormat("dd/MM/yyyy");
	SimpleDateFormat formatador2 = new SimpleDateFormat("yyyy/MM/dd");
	formatador1.setLenient(false); // Não permite que valores fora dos limites sejam aceitos
	formatador2.setLenient(false);
	
	Date date1;
	Date date2;

	String dat1 = "20/4/2004";
	String dat2 = "2004/4/20";
		
	try {
		date1 = formatador1.parse(dat1);
		System.out.println(formatador2.format(date1));


		date2 = formatador2.parse(dat2);
		System.out.println(formatador1.format(date2));
	} catch (ParseException e) {
		// Tratar data com formato inválido aqui
	}
PS.: Usei estes nomes de variáveis por que copiei do primeiro post, mas não aconselho deixar desta forma.

Outra coisa, não acho legal salvar datas como String no banco de dados. Prefira salvar a data como java.sql.Date, que já prepara o valor para o banco de dados, sem que você precise formatá-lo antes.

E

Obrigado mesmo pela troca de ideias. Mais eu quero pegar na pagina html o formato da data “12-04-2011” e tranforma neste formato “2011-04-12” para armazenar no banco de dados. uso Mysql.

Deste jeito que você posto em baixo ele não transforma a data recebida “12-04-2011” para formato que o banco aceita “2011-04-12”

SimpleDateFormat formatador1 = new SimpleDateFormat("dd/MM/yyyy");  
    SimpleDateFormat formatador2 = new SimpleDateFormat("yyyy/MM/dd");  
    formatador1.setLenient(false); // Não permite que valores fora dos limites sejam aceitos  
    formatador2.setLenient(false);  
      
    Date date1;  
    Date date2;  
      
    String dat1 = "20/4/2004";  
    String dat2 = "2004/4/20";  
          
    try {  
        date1 = formatador1.parse(dat1);  
        System.out.println(formatador2.format(date1));  
      
      
        date2 = formatador2.parse(dat2);  
        System.out.println(formatador1.format(date2));  
    } catch (ParseException e) {  
        // Tratar data com formato inválido aqui  
    }
E

E nem deve converter mesmo, pois o padrão definido no primeiro post está usando barras e o que você está querendo usa traço. Neste caso tem que trocar a barra pelo traço no pattern passado no construtor do SimpleDateFormat.

Para mais informações sobre os padrões, olhe no javadoc da classe SimpleDateFormat que tem uma tabela com os pattern letters e alguns exemplos.

E

Obrigado pela atenção mas o que eu quero, e não consegui e deve ser uma coisa simples que tava trabalhando com java.

é simplis quando o usuario clicar em um formulario em html e vai manda este dados para servelet, mais só que a data vai como usuario digitar tipo 12-04-2011 então quero
fazer esta troca para o formato 2011-04-12 para armazena no banco de dados.

a ideia é está poderia fazer javaScript antes de enviar mas quero fazer a validação no servelet.

obrigado a todos, pois este topico esta enteressante.

E

Pessoal resolvi peguei este exemplo no site

http://javafree.uol.com.br/topic-855834-Date-e-SimpleDateFormat

Obrigado a todos…

E

eu.eu:
Obrigado pela atenção mas o que eu quero, e não consegui e deve ser uma coisa simples que tava trabalhando com java.

é simplis quando o usuario clicar em um formulario em html e vai manda este dados para servelet, mais só que a data vai como usuario digitar tipo 12-04-2011 então quero
fazer esta troca para o formato 2011-04-12 para armazena no banco de dados.

a ideia é está poderia fazer javaScript antes de enviar mas quero fazer a validação no servelet.


Só a conversão de String da pra fazer até com regex usando replaceAll, mas não acho que seja a solução mais indicada.

Eu indico que seja da seguinte forma:

1- Pegue a String digitada com request.getParameter(“nomeDoParametro”);
2- Crie o DateFormat usando o pattern do formato digitado pelo usuário:

SimpleDateFormat formatador1 = new SimpleDateFormat("dd-MM-yyyy"); // dia-mês-ano3- Faça o parse da String para Date;
4- Na hora de salvar, crie um objeto java.sql.Date e passe para sua PreparedStatement. Para criar o java.sql.Date use o construtor que recebe o tempo em milissegundos:

java.sql.Date dataSQL = new java.sql.Date(date.getTime()); // date é a data obtida pelo parse de SimpleDateFormat . . . pstmt.setDate(dataSQL); // estou assumindo que pstmt é sua PreparredStatement que salva os dados no BD
Assim o próprio PreparredStatement já se encarrega de montar a query com o formato correto.

Edit: Não tinha visto que já estava resolvido. Parabéns.

E

Obrigado Eric por tudo…

Criado 10 de abril de 2011
Ultima resposta 14 de abr. de 2011
Respostas 9
Participantes 2