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???

P

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.

P

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