[Discussão] Date ou Calendar?  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Olá.

Sabemos que, em Java, podemos representar instantes do tempo através das classes Date e Calendar. Quando vocês estão modelando classes de negócio que possuem atributos do tipo data, quais dos dois tipos vocês costumam usar? Quais as vantagens e desvantagens de usar cada um deles?

Abraços

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Se você quer só representar uma Data, pode utilizar o objeto Date.
Se quer manipular a data, então user Calendar(visto que os métodos de Date estão praticamente todos depreciados)

Ou tenha pena de sua sanidade e use o JodaTime para ambos os casos.

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
Felipe Kan
JavaEvangelist

Membro desde: 12/07/2005 16:13:03
Mensagens: 418
Offline

Eu só uso SimpleDateFormat!

Na SCJP eles cobram muito Date, DateFormat, Calendar, Locale... mas SimpleDateFormat é o "mais melhor de bom"!

This message was edited 1 time. Last update was at 18/04/2009 14:23:15

pcassiano
Virtual Machine Man

Membro desde: 07/06/2005 16:17:56
Mensagens: 730
Offline

Date está 99% deprecated... Gregorian Calendar não é perfeita, mas é menos pior...
leandronsp
Virtual Machine Man
[Avatar]

Membro desde: 22/03/2008 22:24:29
Mensagens: 520
Localização: São Paulo
Offline

Eu costumo declarar minhas variáveis como Date, e na hora de manipular, uso Calendar. Acontece que alguns métodos de Calendar retornam Date, fazendo com que guarde o resultado em um determinado tipo de variável: Date.

[]´s

Blog | Github | About me! |

Contribua => Parser HTML

Compartilhe arquivos e ideias no ebaH!
[Email] [WWW] [MSN]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

leandronsp wrote:Eu costumo declarar minhas variáveis como Date, e na hora de manipular, uso Calendar. Acontece que alguns métodos de Calendar retornam Date, fazendo com que guarde o resultado em um determinado tipo de variável: Date.

[]´s

Atualmente, é o que eu faço também. Antes eu declarava tudo como Calendar, mas um objeto Date é bem mais leve - apesar de ter vários métodos depreciados.

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

marcosalex
GUJ Expert
[Avatar]

Membro desde: 20/02/2008 12:32:59
Mensagens: 3370
Offline

"

This message was edited 1 time. Last update was at 24/03/2011 13:12:39

[Yahoo!] aim icon [ICQ]
colosos=colossus
JavaChild
[Avatar]

Membro desde: 22/06/2009 17:08:26
Mensagens: 130
Localização: Belém
Offline

galera como eu posso somar uma data com uma que ta armazenada no meu banco?
e por exemplo se quiser somar apenas o mês ou apenas o dia tem como?
jcneto
Debugger
[Avatar]
Membro desde: 23/04/2008 07:00:09
Mensagens: 67
Offline

colosos=colossus wrote:galera como eu posso somar uma data com uma que ta armazenada no meu banco?
e por exemplo se quiser somar apenas o mês ou apenas o dia tem como?


Use a classe Calendar para fazer isso, dependendo de como vc quer vc vai usar ou o método add, ou o método roll:

de uma olhada: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html

Sun Certified Java Programmer - SCJP

Meu Blog
[WWW] [MSN]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Com ambos Date e Calendar você acaba com um código mutável.

Teu código vai ficar um uns bugs bem difíceis de serem debugados quando você começar a reaproveitar os objetos(alguém vai ter essa idéia de jerico), ou distribuí-los em várias threads. A otimização do sistema vai pro espaço.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

Sem duvida o joda-time é a API que voce sempre deve dar preferencia. Calendar é um pesadelo de se trabalhar!

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
colosos=colossus
JavaChild
[Avatar]

Membro desde: 22/06/2009 17:08:26
Mensagens: 130
Localização: Belém
Offline

joda-time? galera como trabalho com isso? e o meu problema já não sei mais o que fazer, tão falando que da bug.

This message was edited 1 time. Last update was at 29/09/2009 08:40:32

sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

tnaires wrote:
leandronsp wrote:Eu costumo declarar minhas variáveis como Date, e na hora de manipular, uso Calendar. Acontece que alguns métodos de Calendar retornam Date, fazendo com que guarde o resultado em um determinado tipo de variável: Date.

[]´s

Atualmente, é o que eu faço também. Antes eu declarava tudo como Calendar, mas um objeto Date é bem mais leve - apesar de ter vários métodos depreciados.


Esta discussão me escapou , por algum motivo...
Date é um Value Object para o long que representa o tempo decorrido de um determinado ponto do tempo representando um instante.
O problema com o Date é que ele - no inicio - transformava esse long em uma representação dia-mes-ano que não é i18n/l10n. Com a introdução de Calendar que é uma calculadora temporal a 18n foi introduzida e os métodos de date deprecated. O fato dos métodos de date estarem deprecated não é um problema! O método mais importante de date - e o único que é relevante para este VO - getTime() não está deprecated. A classe Date não está deprecated. Logo, ela deve ser usada como tiny type para tipagem forte de datas. Além disso Date deve ser considerado imutável pois são os seus métodos mutáveis que estão deprecated.

Calendar além de ser uma calculadora e não um VO (e portanto inerentemente mais pesado) é abstrato. O que significa que em runtime alguem pode ferrar seu codigo ou negocio passando a implementação errada. Básicamente ao usar calendar vc assume que será usado GregorianCalendar , mas isso não é garantido pela tipagem já que Calendar é abstract. Além disso se quiser fazer contas em diversos time frames ainda terá que utilizar um outro calendar (imagine-se usar o calendário tailandêz.para calcular juros...sei lá) Portanto no fim apenas será usado calendar.getTimeMilis que retorna o mesmo que date.getTime.

Como tipo sempre usar Date (ou melhor. Na realidade a pergunta é :porque raios vc não tem uma api própria para tratamento de datas ? Se não quer fazer uma , use uma que já existe.) como calculador sempre usar Calendar (ou melhor) , lembrando que calculos devem ser encapsulados em outros objetos/servicos (via interface) de forma que possa usar calendar ou outra implementação futura melhor (java 7 e sua data api , se vier, ou joda-time)



Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
colosos=colossus
JavaChild
[Avatar]

Membro desde: 22/06/2009 17:08:26
Mensagens: 130
Localização: Belém
Offline

Sua explicação esclareceu muitas coisas mais como eu ainda estou em fase de treinamento com java não sei como somar uma data com a outra, queria um exemplo, eu vi que pode usar add ou roll.
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

colosos=colossus wrote:Sua explicação esclareceu muitas coisas mais como eu ainda estou em fase de treinamento com java não sei como somar uma data com a outra, queria um exemplo, eu vi que pode usar add ou roll.


Você quer somar uma data com outra(datas não somam) ou uma data com uma duração?


Com Joda Time:

This message was edited 1 time. Last update was at 29/09/2009 10:32:46


A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team