Problemas com SimpleDateFormat [Resolvido]

10 respostas
R

Olá galera…

estou com problemas com o SimpleDateFormat.

Ele esta funcionando quase bem. Eu uso ele pra modificar o formato das datas conforme eu preciso, tipo de dd/MM/aa, para dd/MM/aaaa ou aaaa-MM-dd, dependendo da necessidade.
E ele até esta fazendo isso bem, meu problema surgiu quando eu precisei colocar um ano bastante avançado.

se eu tentar executar a linha:

String data = new SimpleDateFormat("yyyy-MM-dd").format(01/02/95);

Ele me retorna “1995-02-01” ao invés de “2095-02-01” como eu queria.

Alguma ideia pra consertar isso???

10 Respostas

E

Uai, isso não é um erro :slight_smile:

Se você disse "meu filho nasceu em 95’ não quer dizer que “meu filho vai nascer em 2095” e sim “meu filho nasceu em 1995” :slight_smile:

B

rbcneto

Realmente isso não é erro.

Mas se quiser, pode setar para que funcione com o século 21

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yy");
String aDate = "03/17/40";
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2000);
dateFormat.set2DigitYearStart(cal.getTime());
System.out.println(dateFormat.get2DigitYearStart());
System.out.println(dateFormat.parse(aDate));
R

Opa…

entanglement, eu ja imaginava que não era um erro do SimpleDateFormat, talvez eu tenha me expressado mal, é que pra mim esta errado pq preciso que “95” vire “2095”.
rs

btafarelo, eu testei o que vc me passou:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
Calendar cal = Calendar.getInstance();  
cal.clear();  
cal.set(Calendar.YEAR, 2000);  
dateFormat.set2DigitYearStart(cal.getTime()); 
newData = dateFormat.format("01/02/95");

mas não funciona, continua me trazendo com a data “1995” ao invés de “2095”…

Alguma ideia, ou eu fiz algo errado???

pmlm

Mas tu queres fazer um format de um Date em String ou um parse de uma String para Date?

B

Cara.

Se você copiou e colou o codigo e não funcionou, não faço idéia.

Pra mim aparece 2040.

Sat Jan 01 00:00:00 BRST 2000
Sat Mar 17 00:00:00 BRT 2040

Esse é o trecho que altera a data de inicio do ano com 2 digitos. Se não funcionou só pode ser aqui.

Calendar cal = Calendar.getInstance(); cal.clear(); cal.set(Calendar.YEAR, 2000); dateFormat.set2DigitYearStart(cal.getTime());

R

rbcneto:
Opa…

entanglement, eu ja imaginava que não era um erro do SimpleDateFormat, talvez eu tenha me expressado mal, é que pra mim esta errado pq preciso que “95” vire “2095”.
rs

btafarelo, eu testei o que vc me passou:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
Calendar cal = Calendar.getInstance();  
cal.clear();  
cal.set(Calendar.YEAR, 2000);  
dateFormat.set2DigitYearStart(cal.getTime()); 
newData = dateFormat.format("01/02/95");

mas não funciona, continua me trazendo com a data “1995” ao invés de “2095”…

Alguma ideia, ou eu fiz algo errado???

Acredito que isso nao é mais certo, pois ja resolveram o famoso bug do milenio. Antes os computadores so liam 2 bits (data era informada assim: 01/03/98), apos as mudancas passaram a ler 4 bits (0101), por isso voce ve a data de hoje assim 01/01/2012. Acho que no seu sistema voce precisa mudar a forma como sao tratadas as datas.

R

Opa…

galera, obrigado pelas ideias… mas vou tentar exemplificar melhor meu problema…

eu tenho uma entrada de dados, digitada pelo usuário, meu gerente, que não é de TI quer que os usuários tenham que digitar somente “01/02/95” ao invés de “01/02/2095”.

então eu preciso pegar essa string “01/02/95” e transformar em outra string “2095-02-01”.

e eu estava usando o SimpleDateFormat pra isso…

mas acho que vou ter que fazer na mão a transformação pq o SimpleDateFormat insiste em me devolver “1995-02-01”.

:frowning:

R

O teu gerente, que nao é de TI, nunca deve ter ouvido falar do bug do milenio, vai por mim cara, isso nao sera possivel, o computador ainda entende que 04/01/98 = 04/01/1998, quer ver ? faz um teste pondo assim: 03/01/00 = 03/01/2000, faz ae, acho melhor voce explicar pra ele sobre o bug do milenio, OUUUUU, faz na mao mesmo =D.

pmlm

Já te deram a solução, tu é que não quiseste ver.

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2000);
dateFormat.set2DigitYearStart(cal.getTime());
Date newData = dateFormat.parse("01/02/95");

System.out.println(newData);

Isto faz o que tu queres!

R

Opa…

Eae pessoal…

Nossa que mancada a minha…

Eu testei esse trecho de código no local errado, tava colocando na saída, mas tenho que colocar na entrada… antes de mudar a string…

mancada minha… foi mal…

mas obrigado a todos que me ajudaram…

post resolvido…

Criado 8 de março de 2013
Ultima resposta 8 de mar. de 2013
Respostas 10
Participantes 5