Persistir DATA [RESOLVIDO]

4 respostas
T

Bom dia.

Estou fazendo a modelagem de um banco e me surgiu a seguinte dúvida:

Como devo persistir a data no banco? Inicialmente defini como varchar( 8 ) ddmmaaaa.

Na aplicação eu formataria para dd/mm/aaaa.

Devo salvar a data já formatada (dd/mm/aaaa) ?

Gostaria de sugestões do senhores.

Obrigado.

4 Respostas

H

Você usa jpa/hibernate?

Se sim, em geral eu apenas anoto o campo como sendo data e deixo que o banco salve como quiser, depois eu apenas formato para a view.

T

Hebert Coelho:
Você usa jpa/hibernate?

Se sim, em geral eu apenas anoto o campo como sendo data e deixo que o banco salve como quiser, depois eu apenas formato para a view.

Não uso.

H

ThalesSilva:
Hebert Coelho:
Você usa jpa/hibernate?

Se sim, em geral eu apenas anoto o campo como sendo data e deixo que o banco salve como quiser, depois eu apenas formato para a view.

Não uso.

No meu antigo trampo não usava o campo como String, mas como date mesmo. E deixava o próprio formato do banco que era MM/dd/yyyy hh:mm:sss . E formatava na unha na hora de salvar e de buscar.

quase a mesma coisa que eu faço com o JPA, só que mais manual.

E
Ola Thales, Para persistir no Banco de dados estou usando Calendar:
Calendar data = Calendar.getInstance();
    data.setTime(rs.getDate("dataNascimento"));
    contato.setDataNascimento(data);
Agora para formatar, fazer cálculos e o que for necessário, estou usando a biblioteca JodaTime, ela é ótima para manipular datas. Somente um exemplo de um pequeno trecho de um código que estou fazendo:
DateTime dataAtual = new DateTime(); //pega a data atual para fazer cálculos até a data de hj
				
		DateTime dataNascimento = new DateTime(contato.getDataNascimento());//chamo a data no meu banco de dados
		String data = dataNascimento.toString("E - dd/MM/yyyy"); //formata a data
		
		Period periodo = new Period(dataNascimento, dataAtual); //me mostra um período, todo cálculo que preciso de período é feito aqui, daí só os chamo métodos da classe Period que preciso.
		Days dias = Days.daysBetween(dataNascimento, dataAtual); //me mostra a quantidade de dias corridos
		
		
                System.out.println("Data de Nascimento: " +	data );
				
		if (periodo.getYears() < 2){
				System.out.println("Idade " + periodo.getYears() + " ano " + periodo.getMonths() +" meses "+
						periodo.getWeeks() + " semanas e "+ periodo.getDays() + " dias - bebê!");
			}
			else if  (periodo.getYears() >= 2 && periodo.getYears() <= 11){
				System.out.println("Idade " + periodo.getYears() + " ano " + periodo.getMonths() +" meses "+
						periodo.getWeeks() + " semanas e "+ periodo.getDays() + " dias - criança!");
			}
			else if  (periodo.getYears() > 11 && periodo.getYears() <= 18){
				System.out.println("Idade " + periodo.getYears() + " anos - adolescente!");
			}
			else if  (periodo.getYears() > 18){
				System.out.println("Idade " + periodo.getYears() + " anos - adulto!");
			}
		
			System.out.println("Voce tem " + dias.getDays() + " dias de vida!\n");
		}

Isso me dá para uma data cadastrada no banco como 22/05/2011, o seguinte resultado:

Data de Nascimento: Dom - 22/05/2011
Idade 1 ano 6 meses 0 semanas e 4 dias - bebê!
Voce tem 554 dias de vida!

O legal é que para eu ter esses resultados eu não precisei calcular nada, os método da classe Period e Days, já fizeram isso pra mim. Isso é ótimo pois evita e muito erros de programação, sem falar na rapidez de desenvolver sistemas que envolvam datas.

Abs.
Edjane

Criado 26 de novembro de 2012
Ultima resposta 26 de nov. de 2012
Respostas 4
Participantes 3