| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 09:19:20
|
humberto-adm
Debugger
![[Avatar]](/images/avatar/3b0a5afb09a6f59c7703237a11687fc0.jpg)
Membro desde: 13/05/2009 11:24:52
Mensagens: 56
Offline
|
Olá galera,
Estou com um projeto desenvolvido em java quase pronto, mas preciso realizar uma subtração envolvendo duas datas.
Na tela do sistema tenho dois campos de texto com uma máscara do tipo ##/##/####. Gostaria de realizar a subtração destas datas para obter o intervalo em dias.
E aproveitando a mensagem, gostaria de sabre as classes do API que trabalham com data. Já conheço Date e Calendar.
[]s, Obrigado
|
O mundo se torna mais inteligente no compartilhamento da informação.
Humberto, humberto-adm@hotmail.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 09:31:51
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
São só essas duas. E são péssimas. Não é à toa que muita gente prefere usar a JODA-Time:
http://joda-time.sourceforge.net/
Eu recomendo fortemente que você use.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 09:58:59
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
humberto-adm wrote:Olá galera,
Estou com um projeto desenvolvido em java quase pronto, mas preciso realizar uma subtração envolvendo duas datas.
Na tela do sistema tenho dois campos de texto com uma máscara do tipo ##/##/####. Gostaria de realizar a subtração destas datas para obter o intervalo em dias.
E aproveitando a mensagem, gostaria de sabre as classes do API que trabalham com data. Já conheço Date e Calendar.
Só existem essas duas.... mas java é uma linguagem de programação (pun intended).
Isso significa que vc pode criar as suas proprias classes para manipular datas e tempos. Isto não significa que é fácil...
Substrair duas datas não é um processo matemático no sentido que vc não pode simplesmente subtrair cada campo da data.
É por isso que deve usar Calendar para fazer calculos. (estamos num cenário onde apenas pode usar classes padrão)
Você tem que tender como fazer esses calculos e para isso vc precisa entender os conceitos relacionados à medição do tempo em java. Neste link vc encontra uma implementação de um método que calcula o numero de dias entre duas datas.
This message was edited 1 time. Last update was at 26/05/2010 10:01:37
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 10:18:48
|
humberto-adm
Debugger
![[Avatar]](/images/avatar/3b0a5afb09a6f59c7703237a11687fc0.jpg)
Membro desde: 13/05/2009 11:24:52
Mensagens: 56
Offline
|
Bom eu estou tentando implementar um classe para realizar esta operação mas esta consumindo tempo no projeto.
ViniGodoy você poderia me passar como eu poderia subtrair duas datas do tipo 2010/05/26 e 2010/05/30 utilizando o JODA - Time.
Eu ja tenho um método que remove as barras da data e se precisar fazer isto eu utilizo ele para elas ficarem assim: 20100526 e 20100530.
Se puder me ajudar eu agradeço muito pq tenho que entregar este projeto semana que vem na faculdade.
[]s, Obrigado
|
O mundo se torna mais inteligente no compartilhamento da informação.
Humberto, humberto-adm@hotmail.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 10:26:46
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
Tem um exemplo logo na página inicial do JodaTime:
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 10:31:11
|
marlon.carvalho
HelloWorld
Membro desde: 13/06/2009 17:23:51
Mensagens: 14
Offline
|
humberto, é possível fazer. Existe este cálculo na biblioteca Alfred (http://alfredlibrary.org), no utilitário CalculoData. Se a ideia é verificar quantos dias existem entre duas datas, então você pode usar a biblioteca desta forma:
Mas, se não quer anexar a biblioteca ao seu projeto, você pode verificar como foi implementado aqui:
http://www.alfredlibrary.org/maven/xref/index.html
Basta achar a classe que mencionei.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 10:34:09
|
sf.marcius
JavaGuru
![[Avatar]](/images/avatar/087d2849417bebba8f772a34eae096e3.jpg)
Membro desde: 11/01/2007 05:58:55
Mensagens: 200
Offline
|
usa 2 Dates.
depois converte pra dias:
1 dia = 24 hs
1h = 60 mins
1min = 60 segs
1 seg = 1000 msegs
logo
vc pode criar uma classe DateHelper por ex e colocar nela os metodos utilitários para datas que tu criar.
eu pelo menos fiz isso.
[]s
|
"Software engineering is a race between programmers, striving to build bigger & better idiot-proof programs, and the Universe, striving to build bigger and better idiots. So far, the Universe is winning." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 16:22:28
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
sf.marcius wrote:usa 2 Dates.
depois converte pra dias:
1 dia = 24 hs
1h = 60 mins
1min = 60 segs
1 seg = 1000 msegs
logo
vc pode criar uma classe DateHelper por ex e colocar nela os metodos utilitários para datas que tu criar.
eu pelo menos fiz isso.
Errrr... Isto é exatamente como vc não deve fazer!
@humberto-adm , cara pelo menos leia as referencias que damos. Se vc tivesse lido o link que passei vc encontrava este método
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2010 17:10:33
|
sf.marcius
JavaGuru
![[Avatar]](/images/avatar/087d2849417bebba8f772a34eae096e3.jpg)
Membro desde: 11/01/2007 05:58:55
Mensagens: 200
Offline
|
sergiotaborda wrote: Errrr... Isto é exatamente como vc não deve fazer!
que existem melhores meios de se fazer isso, como usando o Joda Time por exemplo, isso eu sei... mas pq aquilo que fiz é o modo como não se deve fazer? veja bem que o colega ta dizendo que as datas vêm de text fields com máscara "##/##/####", logo o parse dos dates não conterão infos de hora. também colocou no título "recursos nativos", por isso nao disse de cara o "Joda". usando um mesmo SimpleDateFormat pra fazer o parse dos dois campos, não fará diferença a localização (ambos terão a mesma). o caso do colega é simples. o algorítmo que postei é simples e fácil de entender. qual o caso que ele não da certo nessas condições? Obs: estou perguntando na humildade []s
This message was edited 2 times. Last update was at 26/05/2010 18:43:48
|
"Software engineering is a race between programmers, striving to build bigger & better idiot-proof programs, and the Universe, striving to build bigger and better idiots. So far, the Universe is winning." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/05/2010 06:36:51
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
sf.marcius wrote:
sergiotaborda wrote:
Errrr... Isto é exatamente como vc não deve fazer!
que existem melhores meios de se fazer isso, como usando o Joda Time por exemplo, isso eu sei...
mas pq aquilo que fiz é o modo como não se deve fazer?
Porque o tempo contado em milisegundos não é proporcional ao tempo corrido em dias. Por exemplo, se o ano é bissexto o tempo em milesgundos corrido desde 27 de fevereiro a 1 de março é o mesmo que corrido de 28 a 1 se o ano não é bissexto. Existem muitas peculiaridades e por isso que temos a classe calendar para cuidar disso. Depois a conversão para dias e meses é simplista, dependendo do ano e do calendário , ela pode não estar certa. Portanto, é melhor usar o algoritmo que funciona sempre, e esse é aqule que exemplifiquei, vai somando um dia, até chegar na data que se quer. Repare que não é uma questão de melhor e pior. O seu método não dá resultados corretos, logo ele nem sequer uma opção.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/05/2010 14:53:35
|
humberto-adm
Debugger
![[Avatar]](/images/avatar/3b0a5afb09a6f59c7703237a11687fc0.jpg)
Membro desde: 13/05/2009 11:24:52
Mensagens: 56
Offline
|
A solução que eu usei no meu projeto foi essa, deu certo, eu tinha pensado neste tipo de método, obrigado
[]s
sf.marcius wrote:usa 2 Dates.
depois converte pra dias:
1 dia = 24 hs
1h = 60 mins
1min = 60 segs
1 seg = 1000 msegs
logo
vc pode criar uma classe DateHelper por ex e colocar nela os metodos utilitários para datas que tu criar.
eu pelo menos fiz isso.
[]s
|
O mundo se torna mais inteligente no compartilhamento da informação.
Humberto, humberto-adm@hotmail.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/05/2010 15:00:02
|
humberto-adm
Debugger
![[Avatar]](/images/avatar/3b0a5afb09a6f59c7703237a11687fc0.jpg)
Membro desde: 13/05/2009 11:24:52
Mensagens: 56
Offline
|
Vou procurar usar a biblioteca JODA, parece ser fácil.
E qualquer dúvida eu posta aqui no fórum...
Vlw pela dica pessoal
[]s
|
O mundo se torna mais inteligente no compartilhamento da informação.
Humberto, humberto-adm@hotmail.com |
|
|
 |
|
|