Como converter Data para o Formato Brasileiro
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)
Classe Dao
Gostaria de saber qual é uma forma bem simples de fazer essa transformação.
Obrigado pela atenção..
Um abraço
Marcus Paulo
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");
}
}
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;
}
}
Marcus Melo
Curtidas 0
Respostas
Moacy Jr.
09/04/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. :!:
GOSTEI 0
Marcus Melo
09/04/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 [b]mbjunior[/b] falou, usar as facilidades de formatação do pacote java.text, no caso o a classe abstrata DateFormat e sua principal implementação, a [b]SimpleDateFormat[/b]: ela permite criar um objeto que converte datas baseando-se em uma máscara que vc. especifica no construtor. Ex.:
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 [b]false[/b] 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:
[b]java.text.DateFormat[/b]
[b]java.text.SimpleDateFormat[/b]
Seria bom também conhecer melhor as classes:
[b]java.util.Calendar[/b]
[b]java.util.GregorianCalendar[/b]
[b]java.util.Date[/b] (veja que criar um objeto dessa classe diretamente está depreciado)
[b]java.sql.Date[/b]
Você vai aprender bastante sobre esse assunto que é muito importante para qualquer tipo de aplicação! :!:
[]s
. . .
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);
}
. . .GOSTEI 0
Marcus Melo
09/04/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:
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!
DateFormat df = DateFormat.getInstance(DateFormat.LONG, new Locale("pt", "BR"));GOSTEI 0
Marcus Melo
09/04/2009
este pacote é bem prático para gravação e recuperação de datas:
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");
}
}
}
GOSTEI 0
Ricardo Longa
09/04/2009
[quote="fdsdev"]este pacote é bem prático para gravação e recuperação de datas:
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:
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");
}
}
}
date = formatBra.parse(dataBra); return(formatIso.format(date));
date = formatIso.parse(dataIso); return (formatBra.format(date));
GOSTEI 0
Luis Quinhone
09/04/2009
Tentei usar essa classe, mas dá erro, usei assim:
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)
GOSTEI 0
Ricardo Staroski
09/04/2009
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"
GOSTEI 0