Converter campo do tipo String para Date()

Java

09/04/2009

Pessoal, preciso converter um campo String, tipo um request.getParameter("contendo_uma_data_no_formato_dd/MM/yyyy") para um campo do tipo Date. Como faço isto ?
Arlei Junior

Arlei Junior

Curtidas 0

Respostas

Pedro Almeida

Pedro Almeida

09/04/2009

Faça assim:
String texto = "16/08/2004";
String formato = "dd/MM/yyyy";
Date date = new SimpleDateFormat(formato).parse(texto);
:!:
GOSTEI 0
Pedro Almeida

Pedro Almeida

09/04/2009

[quote="staroski"]Faça assim:
String texto = "16/08/2004";
String formato = "dd/MM/yyyy";
Date date = new SimpleDateFormat(formato).parse(texto);
:!:
desculpa minha opinião amadora mas fiz desse jeito, mas preciso de uma função que retorna uma data formatada para o MySql private Date converteData(String mydata) throws IOException, ParseException{ Date data = null; DateFormat dtOutput = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try {data = dtOutput.parse(mydata); System.out.println("data vai="+ dtOutput.format(data));} catch (java.text.ParseException ex) {ex.getMessage();} System.out.println("data vai="+ data); return data; } só que "return data" devolve null, ou seja não foi "setada no try /catch
GOSTEI 0
Pedro Almeida

Pedro Almeida

09/04/2009

Utilize as tags CODE ao escrever código java. Porque precisa formatar a data para o MySQL? Se você inserir um objeto do tipo java.sql.Date, você não vai precisar se preocupar com o formato da data. Porque você pos um throws IOException e ParseException? Você disse que seu método está retornando null, isso não pode ser verdade, provavelmente ele está lançando uma excessão. Posta o Stack Trace dessa excessão.
private Date converteData(String mydata) {
	Date data = null;
	try {
		DateFormat dtOutput = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		data = dtOutput.parse(mydata);
	catch (ParseException e) {
		e.printStackTrace();
	}
	return data;
}
GOSTEI 0
Pedro Almeida

Pedro Almeida

09/04/2009

[quote="staroski"]Utilize as tags CODE ao escrever código java. Porque precisa formatar a data para o MySQL? Se você inserir um objeto do tipo java.sql.Date, você não vai precisar se preocupar com o formato da data. Porque você pos um throws IOException e ParseException? Você disse que seu método está retornando null, isso não pode ser verdade, provavelmente ele está lançando uma excessão. Posta o Stack Trace dessa excessão.
private Date converteData(String mydata) {
	Date data = null;
	try {
		DateFormat dtOutput = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		data = dtOutput.parse(mydata);
	catch (ParseException e) {
		e.printStackTrace();
	}
	return data;
}


retorna null pq fiz um System.out.println na chamda da funçao pq o mysql dizia que estava tentando inserir null. O problema , creio, é que  a data vem no formato americano, ou seja: 
time=8/16/2010 4:00pm, 
Recebo isso como string e tenho que inserir numa DB que tem um campo do tipo datetime (mysql) 
o try/catch foi uma sugestão que achei válida, mas o java me pediu para criar throws IOException e ParseException, fiz o que ele pediu, inclusive na classe  MAIN, o que achei estranhissimo. :-(
----
Inserida!
data vai=null
Conectado!
Erro ao inserir um título
Data truncation: Incorrect datetime value: 'null' for column 'snaDataHora' at row 1
BUILD SUCCESSFUL (total time: 6 seconds)

GOSTEI 0
Pedro Almeida

Pedro Almeida

09/04/2009

Nao consigp tratar a Data No meu caso eu tenho uma classe bean onde tenho os campos.
public class pessoa 
{

	private Integer idpessoa;
	private String nome;
	private Date nascimento;

}
com seus respectivos set's e get's. E tambem tenho o meu dao onde coloco o Insert Into que puxa da classe bean os campos.
public class PessoaDAO 
{

	private InterfacePool pool;
	
	public PessoaDAO (InterfacePool pool){
		this.pool = pool;
	}

	public void salvar(Pessoa pessoa) throws SQLException 
	{
		Connection con = null;
		try {
			con = pool.getConnection();
			PreparedStatement ps;
			
			String sqlInsert;
			
			sqlInsert = "INSERT INTO pessoa (nascimento, nome) VALUES (?, ?)";
			
			ps = con.prepareStatement(sqlInsert);

			setPreparedStatement(pessoa, ps);
			
			ps.executeUpdate();
			ps.close();
		}
		finally 
		{
			pool.liberarConnection(con);
		}
	}

	private void setPreparedStatement(Pessoa pessoa,
			PreparedStatement ps) throws SQLException {
		
		ps.setString(1, consumidor.getnome());
		ps.setDate(2, consumidor.getNascimento());
		
	}

}
e claro a minha pagina JSP onde vou digitar meus dados ja com a mascara.

<html>
<head >
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Cadastro Pessoa</title>
</head>
<body bgcolor="#D0E2F2">
<script type="text/javascript">
function data() {
	if (document.frm.nascimento.value.length == 2){
	document.frm.nascimento.value = document.frm.nascimento.value + "/" ; }
	if (document.frm.nascimento.value.length == 5){
	document.frm.nascimento.value = document.frm.nascimento.value + "/"; }
}
</script>
<form onreset="return confirm('Deseja Limpar os campos do formulário?')" id="frm" name="frm" method="post">
<input type="hidden" name="cmd" value="cadastrarPessoa"></input>
<table
	align="center" style="color: #161D26; font-size: 10px; font-family: Tahoma, Verdana, Arial, Sans-Serif; border-left-color: #8080C0; border-top-color: #8080C0; border-right-color: #8080C0; border-bottom-color: #8080C0"
	border="0" cellpadding="3">
	<thead>
		<tr style="color: #161D26; font-style: normal; font-size: 10px; font-family: Tahoma, Verdana, Arial, Sans-Serif; font-weight: bold; width: 411px">
			<th></th>
			
		</tr>
		<tr>
			<td align = "right">Nome*:</td>
			<td colspan="4"><input id="nome" name="nome" ></input></td>
		</tr>

		<tr>
			<td  align = "right">Data de Nascimento*:</td>
			<td><input maxlength="10" onkeypress="data()" id="nascimento" name="nascimento" ></input></td>
	</thead>
</table>
<br>
<table bgcolor="#B0C4DE" align="center" border="0" bordercolor="#DCDCDC" cellspacing="0" cellpadding="5" width="20%">
		<tr>
			
			<td colspan="2" align = "center">
				<input type="submit" title="Salvar" width="80px" height=22px" value="Salvar"></input>
				<input type="reset" title="Cancelar" width="80px" height="22px" value="Cancelar"></input>
			</td>		
		</tr>
</table>
</form>
</body>
</html>
O que devo fazer nesse caso?
GOSTEI 0
Pedro Almeida

Pedro Almeida

09/04/2009

não está dando erro nessa linha?
ps.setDate(2, consumidor.getNascimento())
Um erro comum é devido ao fato do JDBC (setDate) usar java.[b]sql[/b].Date e não o java.[b]util[/b].Date . Verifique qual o tipo retornado por 'getNascimento()'. Se for um java.[b]util[/b].Date, é fácil converter:
java.sql.Date sqlDate = new java.sql.Date(consumidor.getNascimento().getTime());
ps.setDate(2, sqlDate);
[[]]
GOSTEI 0
POSTAR