Array
(
)

Como converter Data para o Formato Brasileiro

Marcus Melo
   - 09 abr 2009

Olá, pessoal, bem essa semana eu me deparei com o problema da Data. onde eu consigo salvar no banco de dados de forma normal . Mas quando ela volta, volta no formato 1996-05-22 e gostaria que ela ficasse no padrão Brasileiro (dd/MM/yyyy) #Código if (acao.equalsIgnoreCase("usuario.consultar")) { String campo = request.getParameter("campo"); String valor = request.getParameter("valor"); int tipo = Integer.parseInt(request.getParameter("tipo")); Vector usuariosRetornados = UsuarioDao.consultaUsuarios(campo, valor, tipo); if (usuariosRetornados.size() > 0) { request.getSession(true).setAttribute("usuarios", usuariosRetornados); response.sendRedirect("consulta_usr_retorno.jsp"); } else { request.getSession(true).setAttribute("tipomsg", "falha"); request.getSession(true).setAttribute("msg", "Não houveram usuarios encontrados"); response.sendRedirect("msg.jsp"); } } Classe Dao #Código public static Vector consultaUsuarios(String campo, String valor,int tipoPesquisa) { String sql = null; switch (tipoPesquisa) { case PESQUISA_INICIAL: sql=" select * from USUARIO where "+campo+" like '"+valor+"%' order by "+campo+" asc"; break; case PESQUISA_CONTEM: sql= "select * from USUARIO where "+ campo+" like '%"+valor + "%' order by "+campo+" asc"; break; case PESQUISA_TERMINA: sql = "SELECT * FROM USUARIO WHERE "+ campo+" like '%"+valor + "' order by "+campo+" asc"; break; case PESQUISA_EXATO: sql = "SELECT * FROM USUARIO WHERE "+ campo+"='"+valor + "' order by "+campo+" asc"; break; } setup(); try { Statement qry = conn.createStatement(); ResultSet rs = qry.executeQuery(sql); Vector retorno = new Vector(); Usuario usuario = null; while (rs.next()) { usuario = new Usuario(); usuario.setCodigo_Usuario(rs.getInt(1)); usuario.setNome_Usuario(rs.getString(2)); usuario.setLogin_Usuario(rs.getString(3)); usuario.setSenha_Usuario(rs.getString(4)); usuario.setData_Nascimento(rs.getDate(5)); usuario.setEmail_Usuario(rs.getString(6)); usuario.setObservacao(rs.getString(7)); retorno.add(usuario); } return retorno; } catch (SQLException ex) { ex.printStackTrace(); return null; } } Gostaria de saber qual é uma forma bem simples de fazer essa transformação. Obrigado pela atenção.. Um abraço Marcus Paulo

Moacy Jr.
   - 09 abr 2009

olha marcos vc pode muito bem utilizar essa data q vem do banco... mas vc terá que formata-la com SimpleDateFormat. dá uma pesquisada aqui no forum q o q não falta é discussão sobre este assunto. :!:

0
|
0

Marcus Melo
   - 09 abr 2009

Se vc. está usando JDBC (claro que está... ;-) ), então o método [i]getDate[/i] de um objeto ResultSet retorna o valor do campo como um objeto java.sql.Date (que por sua vez é filho de java.util.Date). Tudo o que vc. precisa fazer para converter esse objeto em uma representação textual ao seu gosto é, como o mbjunior falou, usar as facilidades de formatação do pacote java.text, no caso o a classe abstrata DateFormat e sua principal implementação, a SimpleDateFormat: ela permite criar um objeto que converte datas baseando-se em uma máscara que vc. especifica no construtor. Ex.: #Código . . . DateFormat df = new SimpleDateFormat("ddMMyyyy"); //Atenção para isto: df.setLenient(false); ResultSet rs = this.conexao.createStatement().executeQuery("SELECT data from tabela"); while(rs.next()){ String minhaData = df.format(rs.getDate(1)); System.out.println(minhaData); } . . . Tem uma coisa importante nesses casos... Vc. viu a linha onde usamos o método setLenient()? Ela é necessária pq o SimpleDateFormat, por default, quando não consegue traduzir o valor recebido em uma data válida, converte a coisa para a data válida mais próxima. Isso é legal quando estamos validando entradas de usuário, pq "conserta" datas mal especificadas. No caso de recuperação de banco de dados, é muito comum dependendo do banco, aparecer uma data "correta" do ponto de vista do formato do BD, mas que não é uma data válida (ex.: 00-00-0000). Ao receber uma aberração dessas o SimpleDateFormat vai tentar transformar em uma data "correta" e olha o estrago feito! Para evitar isso, passamos false para o método [i]setLenient()[/i], desbilitando esse comportamento. Assim o método [i]format()[/i] passa a lançar uma exceção caso a data recebida não seja uma data válida. Para mais detalhes sobre essas classes, consulte o javadoc para: java.text.DateFormat java.text.SimpleDateFormat Seria bom também conhecer melhor as classes: java.util.Calendar java.util.GregorianCalendar java.util.Date (veja que criar um objeto dessa classe diretamente está depreciado) java.sql.Date Você vai aprender bastante sobre esse assunto que é muito importante para qualquer tipo de aplicação! :!: []s

0
|
0

Marcus Melo
   - 09 abr 2009

Em tempo: Também existe uma forma de obter uma instância de java.text.DateFormat já formatada para uma região específica, encapsulada em um objeto java.util.Locale: #Código DateFormat df = DateFormat.getInstance(DateFormat.LONG, new Locale("pt", "BR")); No caso de haver uma instância disponível no DateFormat decente para a nossa região (não testei). Se que existem localidades pré-definidas na classe Locale (como Locale.FRENCH, ou Locale.KOREAN), seria bom que existisse um Locale.BRAZIL. Vamos bater panela, gente!

0
|
0

Marcus Melo
   - 09 abr 2009

este pacote é bem prático para gravação e recuperação de datas: #Código package br.rgi.ueg; import java.text.SimpleDateFormat; import java.util.Date; import java.text.ParseException; /** * Esta classe contém métodos para efetuar conversão de datas entre os formatos ISO (yyyy-MM-dd) e ABNT (dd/MM/yyyy). * Estes métodos são voltados pra agilizar a gravação e recuperação de datas em Bancos de Dados MySQL. */ public class ConvData { private SimpleDateFormat formatIso; private SimpleDateFormat formatBra; private Date date; public ConvData() { formatIso = new SimpleDateFormat("yyyy-MM-dd"); formatBra = new SimpleDateFormat("dd/MM/yyyy"); } /** * Converte uma data no formato ABNT em formato ISO; * @param dataBra Argumento que recebe data no formato ABNT(dd/MM/yyyy); * @return Uma data no formato ISO(yyyy-MM-dd). */ public String parseDataIso(String dataBra) { try { date = formatIso.parse(dataBra); return(formatIso.format(date)); } catch(ParseException e) { e.printStackTrace(); return("Parse Date Error"); } } /** * Converte uma data no formato ISO em formato ABNT; * @param dataIso Argumento que recebe data no formato ISO(yyyy-MM-dd); * @return Uma data no formato ABNT(dd/MM/yyyy). */ public String parseDataBra(String dataIso) { try { date = formatBra.parse(dataIso); return(formatBra.format(date)); } catch(ParseException e) { e.printStackTrace(); return("Parse Date Error"); } } }

0
|
0

Ricardo Longa
   - 09 abr 2009


Citação:
="fdsdev"]este pacote é bem prático para gravação e recuperação de datas: #Código package br.rgi.ueg; import java.text.SimpleDateFormat; import java.util.Date; import java.text.ParseException; /** * Esta classe contém métodos para efetuar conversão de datas entre os formatos ISO (yyyy-MM-dd) e ABNT (dd/MM/yyyy). * Estes métodos são voltados pra agilizar a gravação e recuperação de datas em Bancos de Dados MySQL. */ public class ConvData { private SimpleDateFormat formatIso; private SimpleDateFormat formatBra; private Date date; public ConvData() { formatIso = new SimpleDateFormat("yyyy-MM-dd"); formatBra = new SimpleDateFormat("dd/MM/yyyy"); } /** * Converte uma data no formato ABNT em formato ISO; * @param dataBra Argumento que recebe data no formato ABNT(dd/MM/yyyy); * @return Uma data no formato ISO(yyyy-MM-dd). */ public String parseDataIso(String dataBra) { try { date = formatIso.parse(dataBra); return(formatIso.format(date)); } catch(ParseException e) { e.printStackTrace(); return("Parse Date Error"); } } /** * Converte uma data no formato ISO em formato ABNT; * @param dataIso Argumento que recebe data no formato ISO(yyyy-MM-dd); * @return Uma data no formato ABNT(dd/MM/yyyy). */ public String parseDataBra(String dataIso) { try { date = formatBra.parse(dataIso); return(formatBra.format(date)); } catch(ParseException e) { e.printStackTrace(); return("Parse Date Error"); } } }
Este código é excelente, bem organizado e simples, porém, existem dois pequenos erros em cada função. Na função "parseDataIso" altere a primeira linha apenas para Bra: #Códigodate = formatBra.parse(dataBra); return(formatIso.format(date)); E na função "parseDataBra" altere a primeira linha apenas para Iso: #Códigodate = formatIso.parse(dataIso); return (formatBra.format(date)); Volto a afirmar que esta estrutura de código é excelente, parabéns ao nosso colega acima.

0
|
0

Luis Quinhone
   - 27 set 2016

Tentei usar essa classe, mas dá erro, usei assim: #Código ConverteData dt = new ConverteData(); System.out.println(dt.parseBra("2016-09-26 00:00:00")); System.out.println(dt.parseIso("26/09/2016")); ERRO java.text.ParseException: Unparseable date: "2016-09-26 00:00:00" Parse Date Error at java.text.DateFormat.parse(DateFormat.java:366Parse Date Error ) at br.com.syrecom.utils.ConverteData.parseBra(ConverteData.java:51) at Main.main(Main.java:30) java.text.ParseException: Unparseable date: "26/09/2016" at java.text.DateFormat.parse(DateFormat.java:366) at br.com.syrecom.utils.ConverteData.parseIso(ConverteData.java:35) at Main.main(Main.java:31)

0
|
0

Ricardo Staroski
   - 27 set 2016

Você tentou utilizar um parser "yyyy-MM-dd" para parsear "2016-09-26 00:00:00" Se é "yyyy-MM-dd", você só pode passar o "2016-09-26" Se quer realmente passar o "2016-09-26 00:00:00", tem que usar um parser "yyyy-MM-dd HH:mm:ss"

0
|
0