Saudações,
Qual a melhor maneira de se manter objetos transientes* que representam data?
Levanto esta dúvida pelos problemas que já tive ao manipular o date em alguns períodos específicos do horário de verão e configurações de ajuste automático do relógio em máquinas rodando o Windows.
-
- Chamo de "transientes" objetos que irão fazer "viagens". Isto é, aqueles que serão enviados para outros computadores via WebService, que serão persistidos editados e recuperados, que sofrerão acesso via rede… etc.
Em busca desta discussão pela inrternet encontrei um post no javafree.org que fala o seguinte:
[quote]Caros amigos,
Procurei no fórum questões relacionadas ao armazenamento de data com hibernate e java. Algumas pessoas sugerem não utilizar a classe java.util.Date, visto que ela tem algumas particularidades, como por exemplo, o mês começar com 0 e o ano iniciar de 1900.
Vi também que algumas pessoas sugeriram utilizar a classe Calendar, porém tentei usar e vi que alguns dos seus métodos estão como "deprecated".
Então, depois de perder algumas centenas de fios de cabelo, testei o armazenamento de datas utilizando String.
Exemplo:
Para o cadastro de clientes, armazenando id, nome e data_nascimento:
- na tabela clientes, alterei o tipo de data_nascimento para caractere variante (10)
- criei uma classe chamada Data, que já formata no estilo "dd/mm/yyyy" para visualização dos usuários e também no formato "yyyy-mm-dd" para o armazenamento no banco; a classe também recebeu dois métodos, para fazer a leitura das datas nos dois formatos.
- na classe Cliente, o atributo dataNascimento foi modificado para String. Ela ganhou dois métodos, um para transformar a dataNascimento do tipo String para Data e outro para transformar a Data para String.
Bom, no mapeamento, como é de se esperar, coloquei também data_nascimento como String.
E… funcionou.
Agora, eis minha dúvida:
Qual a vantagem de utilizar o tipo Data no banco e na aplicação, visto que consigo fazer comparações com a data no formato:
2007-11-08 < 2007-11-10
como também consigo pegar os aniversariantes do mês de novembro:
select * from clientes where data_nascimento like ‘%-11-%’.
[/quote]
fonte: http://www.javafree.org/javabb/viewtopic.jbb?t=865748
E então? O que vocês acham?