[Ajuda]Passando um Date pelo construtor

Boa tarde pessoal, estou eu aqui mais um vez pra pedir ajuda a vcs :smiley: , vou passar o código e no fim dele explico qual o problema. Só uma observação que o Date que tô usando é java.util.Date.

import java.util.Date;

public class Pessoa {
	
	private String nome;
	private Date data;
	
	public Pessoa(String nome, Date data) {
		this.nome = nome;
		this.data = data;
	}

	public String getNome() {return nome;}

	public void setNome(String nome) {this.nome = nome;}

	public Date getData() {return data;}

	public void setData(Date data) {	this.data = data; }
	
	@Override
	public String toString() {
		return "Nome : " + getNome() + "   Data: " + getData();
	}
}
public class Sistema {
	public static void main(String[] args) {
		
		GregorianCalendar gc = new GregorianCalendar(2009, Calendar.JULY, 15);
		Date date = gc.getTime();
		DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);				
		Pessoa p = new Pessoa("Henrique",date);
		System.out.println(p);		
	}
}

Então, a questão é que eu passo um obj Date para a classe Pessoa e ele imprime -> Nome : Henrique Data: Wed Jul 15 00:00:00 BRT 2009, na minha classe Main, gostaria que ele imprimisse 15/07/1984. Tenho que mudar o construtor da minha classe Pessoa pra DAteFormat, ou posso continuar usando Date no construtor de Pessoa? Gostaria que ainda continuasse sendo Date no construtor e mesmo assim imprimisse 15/07/1984.

Agradeço a todos mais uma vez por toda ajuda!

Dá uma olhada na classe SimpleDateFormat.

Blz, mas no caso do construtor da classe Pessoa, eu deveria mudar pra SimpleDateFormat ou podia continuar com Date? Se continuasse com Date como faria pra converter SimpleDateFormat em Date para mandar pro meu construtor de Pessoa?

valeu pela dica!

Utilize o SimpleDateFormatter apenas na hora de exibir sua data… Deixe sua entidade como está…

Pô cara eu tava pensando justamente em fazer isso e vc só fez confirmar oq eu ja queria fazer. Agora se não for pedir demais, estou usando MySQL e JDBC, e na minha tabela tenho nome (VARCHAR) e data(DATE) como campos. Qdo eu for dar um insert de uma pessoa no BD, eu posso deixar Date no construtor de Pessoa ou teria que modificar? O MySQL vai aceitar eu mandar o Date ou teria que ser em outro formato?

Agradecido desde sempre!!

Faça isso (SimpleDateFormat) no toString() da classe Pessoa.

[]'s

Cara, uma opção é você criar na classe Pessoa a variável

private static final DateFormat FORMATO = new SimpleDateFormat("dd/MM/yyyy");

e no método getDate() retornar uma string.

public String getData() {return FORMATO.format(data);}

Abraço!

Se vvc usar PreparedStatement (que é o aconselhado… hj mesmo postei um negócio pra um cara sobre como utilizar e separar SQL do código)…é muito simples…
Por exemplo:

Pessoa p = new Pessoa();

p.setNome("Vinicius");
p.setData(new Data(System.curretTimeMillis()); //Pego data atual


PreparedStatement stm = connection.PrepareStatement("INSERT INTO PESSOA (nome,data) VALUES (?,?)");
//agora eu preciso dizer quais valores eu vou inserir, no caso eu substitui os ?

stm.setString(1,p.getNome());
stm.setDate(2,p.getData());

stm.execute();

Se vc colocar certinho dentro do BD os tipos das colunas é so utilizar PreparedStatement q ele tem todos os tipos de colunas disponiveis e faz as conversoes certinhas…setString, setInt, setDate… Não precisa formatar a data para 2009-09-09… Vai por mim… eu errei mto nisso… já quebrei mta cabeça

[quote=viniciusfaleiro]Se vvc usar PreparedStatement (que é o aconselhado… hj mesmo postei um negócio pra um cara sobre como utilizar e separar SQL do código)…é muito simples…
Por exemplo:

Pessoa p = new Pessoa();

p.setNome("Vinicius");
p.setData(new Data(System.curretTimeMillis()); //Pego data atual


PreparedStatement stm = connection.PrepareStatement("INSERT INTO PESSOA (nome,data) VALUES (?,?)");
//agora eu preciso dizer quais valores eu vou inserir, no caso eu substitui os ?

stm.setString(1,p.getNome());
stm.setDate(2,p.getData());

stm.execute();

Se vc colocar certinho dentro do BD os tipos das colunas é so utilizar PreparedStatement q ele tem todos os tipos de colunas disponiveis e faz as conversoes certinhas…setString, setInt, setDate… Não precisa formatar a data para 2009-09-09… Vai por mim… eu errei mto nisso… já quebrei mta cabeça

[/quote]

Acho que essa não é a dúvida dele :roll:

bixo, em java vc tem q ficar esperto com uma função que chama toString. é ela que é chamada por padrão quando vc precisa exibir alguma coisa, sem usar um método específico para impressão. antes de qualquer coisa, pesquise sobre isso.

vc terá q fazer uma função que monte essa data do jeito que vc quer, pois a maquina virtual não tem como adivinhar como vc vai querer essa data :wink:

as dicas acima vão te ajudar nisso.

++ editado +++

q mancada, vc ja tava implementando o toString… esque oq falei. abraço!

Valeu mesmo galera, a todos que me ajudaram tanto na parte pra imprimir , qto na parte para inserir a classe Pessoa no MySQL.

Um abraço a todos!

Entao cara, como o que voce deseja nao faz parte da modelagem da sua classe, entao creio que ficara melhor modificando a implementacao do seu toString():

@Override  
public String toString() {  
   SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
   return "Nome : " + getNome() + "   Data: " + formatador.format(getData());  
} 

t+

[color=red]AJUDA[/color]
Preciso fazer uma alicação que ao ser inicializada já dispare a data atual!
Detalhe que existe um campo [color=green]jTextField[/color] que a data deve ficar atualizando de segundo em segundo como faço?

:?

Crie um tópico separado para as tuas dúvidas sonictk.

Mas respondendo, dê uma olhada no Timer, e implemente um TimerTask que execute a atualização do campo.

[quote=Bruno Laturner] …
Mas respondendo, dê uma olhada no Timer, e implemente um TimerTask que execute a atualização do campo.[/quote]

Já tinha visto, e não consegui fazer, por isso pedi ajuda aqui … :?