Sou novato em Java e preciso da ajuda dos mais experientes. Já vi a diferença entre Calendar e Date mas não consigo decidir qual é mais adequado ao meu projeto.
No banco (SQL Server) a coluna é do tipo DateTime.
O sistema Java recebera informações através de arquivos TXT onde tenho a possibilidade formatar o campo da forma que eu quiser.
A utilização mais comum é pegar um campo data para saber quantos dias passaram até a data atual.
Nas mensagens que li fala que se for coisa simples usar Date e se for fazer algo mais complicado usar Calendar. Mas não estou sabendo definir se o que preciso é simples ou complicado.
posta um exemplo de codigo… destacando a duvida… abrass
J
jcombr
Ai é q tá… Não tenho nada ainda.
Estou na faze de criar as classes “pojo/javabeans” (ainda não sei ao certo a diferença entre elas) e so vou usar os atributos de data e hora no futuro quando tiver que saber por exemplo a quantos dias um “Contas a Receber” esta vencido ou quando tiver a necessidade de bloquear a execução do sistema a mais q “X” dias.
Nesses casos qual seria melhor Date, Calendar ou Outro? Qual a sua sugestão?
Valeu pela atenção.
C
clauslk
nao utilizei muitas funcionalidades envolvendo datas… porem Calendar me parece bastante completa e atende varias necessidades… como no exemplo abaixo…
importjava.util.*;publicclassEstudos{publicstaticvoidmain(Stringargs[]){Calendaragora=Calendar.getInstance();// vc obtem uma instancia do objeto atraves de um getInstanceSystem.out.println(agora.toString());}}
a saida do codigo acima geraria algo parecido com isso…
eh uma demonstracao dos recursos de Calendar… soh nao sei exatamente quanto a utilidade na comparacao de datas ou coisa do genero…
henriqueluz
A classe Calendar fornece muito mais métodos para você manipular as datas.
Mas quando você for persistir na sua base você terá que persistir sempre objetos Date.
Exemplos de uso:
publicstaticvoidmain(String[]args){//Instancia com a data atualCalendaragora=Calendar.getInstance();Calendardepois=Calendar.getInstance();//Adiciona dois mesesdepois.add(Calendar.MONTH,2);//adiciona 4 diasdepois.add(Calendar.DAY_OF_WEEK,4);//Adiciona 4 anosdepois.add(Calendar.YEAR,4);//Compara as duas datasSystem.out.println(depois.compareTo(agora));//Exibir datasSystem.out.println(agora.getTime());System.out.println(depois.getTime());}
nel
Oi!
Errado! Ele disse que trata-se de um Datetime no banco de dados dele, perfeito? Então não é um objeto Date mas sim um Objeto TimeStamp!
jcombr, a diferença básica é a respeito da manipulação sobre a data que você tem acesso. Tanto é verdade, que grande parte dos métodos do java.util.Date possui seu métodos depreciados, justamente porque você possui o objeto Calendar. Minha recomendação é simples:
Você precisa manipular data? Adicionar horas, minutos, segudos, dias, meses…algo desse tipo?
Sim? Use Calendar!. Você não precisa de nada disso, apenas repassar diretamente a data para o banco de dados? Simples, use o java.util.Date.
Só um lembrete, se estiver usando JDBC, faça assim para persistir no banco:
Dessa forma, a persistência vai ocorrer da forma correta.
O número supõe que o Datetime esteja na coluna 1, obviamente, e o suaData é uma variavél que corresponde a um objeto java.util.Date.
Se fosse um calendar, era seuCalendar.getTime().getTime(), simples assim.
Abraços.
henriqueluz
nel,
Valeu pela ressalva. Não tinha prestado atenção quanto ao tipo no BD.
Abs,
nel
riqueluz:
nel,
Valeu pela ressalva. Não tinha prestado atenção quanto ao tipo no BD.
Abs,
Que isso rique.
Mas as dicas sobre o Calendar foram corretas, agora é questão do nosso colega avaliar qual objeto ele vai utilizar.
Abraços!
J
jcombr
Pela dica acima vai ter que ser Calendar.
O meu caso real é. Vou desenvolver para Android, o sistema vai trabalhar off-line, para atualizar os dados ele recebe um TXT com os dados do sistema de retaguarda e grava num banco SQLite no dispositivo.
Os dados podem ser formatados da forma que eu quiser porque também sou eu que gero esse TXT.
Dentro do sistema Android vou precisar calcular numero de dias da data de um registro até a data atual.
Com essa situação o correto é mesmo Calendar?
nel
Oi!
Resumidamente, você tem a data x que, obviamente, é inferior a data atual e precisa saber esse intervalo, em dias, perfeito?
O Calendar lhe resolve isso de forma tranquila, se precisar calcular considerando, hora, minuto, segundos, também resolve, mas ai exige uma manipulação mais criteriosa e conhecimento da classe Calendar.
Se este for o caso, podes usar a API Joda Time, que é bem difundida no meio e recomendada em massa.
Exemplos é o que não falta. Se for apenas intervalo de datas, ignorando hora, minuto e etc, use o Calendar mesmo, evita mais uma dependencia de JAR, já que é nativo do Java.
De qualquer forma, não use o java.util.Date, para manipulação de datas, não é recomendado, tanto é, que grande maioria de seus métodos são depreciados.
Basta consultar a API do java.util.Date que verá a grande quantidade de métodos depreciados e recomendações do uso do Calendar.
Abraços.
lucasmurata
Calendar e Date nunca são adequado para projetos, são api lixo do Java. Use Joda Time e pare de sofrer.
henriqueluz
Menos, bem menos.
nel
Sim, quando eu simplesmente preciso ter a data atual ao invés de dar um new Date() ou um Caledar c = Calendar.getInstance() eu simplesmente vou baixar uma nova API, como o Joda Time e etc. Joda Time é desenvolvido em Delphi né, nem usam Java né?
Quando eu acho que já li de tudo, vejo isso.
Me engano fácil mesmo rs.
lucasmurata
Sim, quando eu simplesmente preciso ter a data atual ao invés de dar um new Date() ou um Caledar c = Calendar.getInstance() eu simplesmente vou baixar uma nova API, como o Joda Time e etc. Joda Time é desenvolvido em Delphi né, nem usam Java né?
Quando eu acho que já li de tudo, vejo isso.
Me engano fácil mesmo rs.
O autor do post nao disse simplesmente em uma instancia de Date.
Se levar em consideração:
O sistema Java recebera informações através de arquivos TXT onde tenho a possibilidade formatar o campo da forma que eu quiser.
A utilização mais comum é pegar um campo data para saber quantos dias passaram até a data atual.
Ele precisa manipular datas, calcular periodos.
Sendo assim Calendar é um lixo pra isso.
nel
Sim, quando eu simplesmente preciso ter a data atual ao invés de dar um new Date() ou um Caledar c = Calendar.getInstance() eu simplesmente vou baixar uma nova API, como o Joda Time e etc. Joda Time é desenvolvido em Delphi né, nem usam Java né?
Quando eu acho que já li de tudo, vejo isso.
Me engano fácil mesmo rs.
O autor do post nao disso simplesmente uma instancia de Date.
Se levar em consideração:
O sistema Java recebera informações através de arquivos TXT onde tenho a possibilidade formatar o campo da forma que eu quiser.
A utilização mais comum é pegar um campo data para saber quantos dias passaram até a data atual.
Ele precisa manipular datas, calcular periodos.
Sendo assim Calendar é um lixo pra isso.
Lucas, está raciocinando antes de falar/digitar ou é aleatório o que diz?
Primeiro:
Isso é uma afirmação genérica, logo, se aplica a todos os projetos, o que é uma BAITA mentira.
Depois:
Ele precisa manipular datas, calcular periodos.
Sendo assim Calendar é um lixo pra isso.
Outra asneira. Lixo é uma API que não faz o que é proposto por ela. Imagina a String que não armazena uma palavra dentro dela, isso sim seria um lixo.
Uma API ser complicada de manipular, é outra história. Se você não tem conhecimento suficiente para manipular um Calendar, isso não significa que ela seja um lixo. A única coisa em que a SUN assumiu foi que o Calendar deveria ser imutável e sim, ele torna-se trabalhoso para a necessidade do que o cidadão aqui precisa, entretanto, dizer que é um lixo é uma asneira sem tamanhos.
Mas não vou mais discutir isso com você, pois alguém que trabalha com Java chamar a API Calendar de lixo é porque de duas uma, ou trabalha com Java a um mês e não sabe nem como pegar o mês da API Calendar ou tem opinião formada e devemos respeitar.
Abraços.
henriqueluz
Ou então tá querendo gerar um flame
lucasmurata
Sim, quando eu simplesmente preciso ter a data atual ao invés de dar um new Date() ou um Caledar c = Calendar.getInstance() eu simplesmente vou baixar uma nova API, como o Joda Time e etc. Joda Time é desenvolvido em Delphi né, nem usam Java né?
Quando eu acho que já li de tudo, vejo isso.
Me engano fácil mesmo rs.
O autor do post nao disso simplesmente uma instancia de Date.
Acho que uma pessoa que teve que manipular data e hora de verdade num sistema, quer passar longe da API pra data do java que propria Sun jogou no lixo.