Descrobrir formato da data  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

Bom dia a todos,

Queria fazer um método que permitisse incrementar dias ou meses ou anos em uma data. Para isso usei a seguinte estrutura:



Esse método recebe como parâmetros uma data (String... motivo do meu problema), um inteiro que representa o incremento (ou decremento) e uma outra que define se o processamento ocorrerá sobre o dia, mês ou ano.
O meu problema está no momento em que eu gero o GregorianCalendar, ali eu tive que fazer um substring para obter as partes da data, no entanto, não tem como eu garantir que a data estará sempre nesse formato (dd/MM/yyyy).
Queria saber se tem alguma forma de descobrir o formato que está sendo utilizado para formatar a data na máquina do cliente? Ou, seria melhor ainda, se tem como eu obter as partes da data (dia, mês e ano) de uma String independentemente do formato em que ela se encontre?

Desde já agradeço pela atenção

[]s

[Email] [MSN]
Vini Fernandes
Virtual Machine Man
[Avatar]

Membro desde: 20/01/2009 08:43:02
Mensagens: 523
Offline

Cara, para formatar datas costumo utilizar a SimpleDateFormat:


Mais detalhes voce conseguira nma APi, tem muitos recursos lá!
ate mais


What do you know about Java? Help me!
[MSN]
rissato
JavaEvangelist
[Avatar]

Membro desde: 16/05/2006 22:07:12
Mensagens: 446
Localização: Uberlândia
Offline

pq vc nao usa o método add() da classe Calendar?


Quer vc pense que é capaz ou não, vc está certo!

Sun Certified Java Programmer 6.0
[MSN] [ICQ]
g4j
GUJ Ranger
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 817
Localização: Curitiba
Offline

eberson_oliveira wrote:
Queria saber se tem alguma forma de descobrir o formato que está sendo utilizado para formatar a data na máquina do cliente? Ou, seria melhor ainda, se tem como eu obter as partes da data (dia, mês e ano) de uma String independentemente do formato em que ela se encontre?


Sem chance! Você só consegue quando o dia do mês for maior que 12. Imagine a data 12/12/2008. Impossível saber qual é o dia pra poder pegar o próximo.
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

Vini Fernandes wrote: Cara, para formatar datas costumo utilizar a SimpleDateFormat:


Mais detalhes voce conseguira nma APi, tem muitos recursos lá!
ate mais



Olá Vini Fernandes,

O meu problema está no fato de não saber em que formato a data virá... pode ser uma string qualquer, inclusive inválida, eu queria identificar as partes adicionar dias, meses, anos, conforme a necessidade e retornar no mesmo formato que me foi enviada.

[]s
[Email] [MSN]
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

rissato wrote:pq vc nao usa o método add() da classe Calendar?



Ola rissato,

Eu pretendo usar sim o método add, só que não sei como informar a data para ele... eu estou utilzando o GregorianCalendar e não encontrei um construtor onde pudesse informar uma string contendo uma data qualquer... Eu preciso receber essa data e manipulá-la, da forma como mencionou, porém não sei como passar a data para ele...

alguma idéia?

[]s
[Email] [MSN]
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

g4j wrote:
eberson_oliveira wrote:
Queria saber se tem alguma forma de descobrir o formato que está sendo utilizado para formatar a data na máquina do cliente? Ou, seria melhor ainda, se tem como eu obter as partes da data (dia, mês e ano) de uma String independentemente do formato em que ela se encontre?


Sem chance! Você só consegue quando o dia do mês for maior que 12. Imagine a data 12/12/2008. Impossível saber qual é o dia pra poder pegar o próximo.


Olá g4j,

Por isso mesmo eu queria descobrir uma forma de descobrir uma forma de identificar o formato ou passá-lo a algum objeto que identifique automaticamente... Imaginei que tivesse alguma api que tivesse acesso a esse tipo de informação, mas não estou encontrando nada... Pensei em procurar, inicialmente, no Locale, mas não achei nada que eu pudesse e/ou soubesse usar...

Tem alguma solução/idéia?

[]s
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

GregorianCalendar não tem um construtor que recebe uma string. Em vez disso, normalmente se faz algo parecido com o seguinte:
[WWW]
rissato
JavaEvangelist
[Avatar]

Membro desde: 16/05/2006 22:07:12
Mensagens: 446
Localização: Uberlândia
Offline

eberson_oliveira wrote:
rissato wrote:pq vc nao usa o método add() da classe Calendar?



Ola rissato,

Eu pretendo usar sim o método add, só que não sei como informar a data para ele... eu estou utilzando o GregorianCalendar e não encontrei um construtor onde pudesse informar uma string contendo uma data qualquer... Eu preciso receber essa data e manipulá-la, da forma como mencionou, porém não sei como passar a data para ele...

alguma idéia?

[]s



Quer vc pense que é capaz ou não, vc está certo!

Sun Certified Java Programmer 6.0
[MSN] [ICQ]
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

thingol wrote:GregorianCalendar não tem um construtor que recebe uma string. Em vez disso, normalmente se faz algo parecido com o seguinte:


Olá thingol,

Entendi o seu exemplo.... acho que não estou conseguindo me expressar...
Eu pretendo receber uma data num formato qualquer ("dd/MM/yyyy", "d/M/yy", etc ), adicionar um mês, por exemplo, e retorná-la no mesmo formato em que recebi (para não alterar o formato de quem invocou o meu método)
Já fiz vários testes, mas não obtive sucesso...

Entendeu o que estou tentando fazer? Não sei se é possível...

grato pela atenção,

[]s


[/code]
[Email] [MSN]
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

rissato wrote:
eberson_oliveira wrote:
rissato wrote:pq vc nao usa o método add() da classe Calendar?



Ola rissato,

Eu pretendo usar sim o método add, só que não sei como informar a data para ele... eu estou utilzando o GregorianCalendar e não encontrei um construtor onde pudesse informar uma string contendo uma data qualquer... Eu preciso receber essa data e manipulá-la, da forma como mencionou, porém não sei como passar a data para ele...

alguma idéia?

[]s




Olá rissato,

Isso funciona com a data atual.. mas se for uma data qualquer, num formato qualquer e string ainda...
como faço para manipulá-la e retornar o resultado no mesmo formato que recebi?

[]s
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline



Você pode então fazer o seguinte: digamos que existam 3 formatos que você aceite (afinal de contas, seu programa não usa inteligência artificial, ou usa?). Então crie 3 DateFormat, um para cada formato aceito.
Use setLenient(false) para que o método parse gere uma exceção se não estiver no formato aceito.
Se você conseguir ler o dado, então use o formato para formatar o resultado na volta.
[WWW]
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

thingol wrote:

Você pode então fazer o seguinte: digamos que existam 3 formatos que você aceite (afinal de contas, seu programa não usa inteligência artificial, ou usa?). Então crie 3 DateFormat, um para cada formato aceito.
Use setLenient(false) para que o método parse gere uma exceção se não estiver no formato aceito.
Se você conseguir ler o dado, então use o formato para formatar o resultado na volta.


Entendi... vou adotar a sua solução.. farei alguns testes e depois coloco o resultado. Sobre a inteligência artificial, só não uso porque não sei... :cry: mas quando aprender... volto aqui e coloco a solução usando esse conceito :D

Muito grato pela ajuda

[]s
[Email] [MSN]
rissato
JavaEvangelist
[Avatar]

Membro desde: 16/05/2006 22:07:12
Mensagens: 446
Localização: Uberlândia
Offline



Olá rissato,

Isso funciona com a data atual.. mas se for uma data qualquer, num formato qualquer e string ainda...
como faço para manipulá-la e retornar o resultado no mesmo formato que recebi?

[]s


Só vc substituir o "new Date()" pela data que vc quer... e pra isso vc nao precisa nem pensar em formato...

Quer vc pense que é capaz ou não, vc está certo!

Sun Certified Java Programmer 6.0
[MSN] [ICQ]
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

Olá a todos,

Montei o código da seguinte maneira:



Coloquei apenas dois tipos (só para ver se funcionaria), e fiz o seguinte teste:



obtive o seguinte resultado:



Como faço para que ele entender que deve retornar 02/12/08, por exemplo, ao invés de 02/12/0008?

Usei o setLenient( false )... mas quando tentou pegar uma data: "02/12/08" com formato "dd/MM/yyyy" não deu exception... alguma idéia?

Agradeço desde já,

[]s



[Email] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team