Comportamento estranho de LENIENT do SimpleDateFormat para alguns anos

6 respostas
fabim

To postando meio que sem acreditar mesmo.
Criem um SimpleDateFormat ae com a mascara dd/MM/yyyy
Agora tentem formatar as seguintes datas:

  • 03/11/2040
  • 03/11/2041
  • 03/11/2042
  • 03/11/2999
  • 03/11/3000

Apenas o ano 2041 e o ano 2999 falham.
Isso é o que, easter egg de programador puto com a Sun?

6 Respostas

fabim

Setando o lenient(false), pra poder criticar datas invalidas

Rodrigo_Sasaki
public static void main(String[] args) throws Exception{
	List<String> datas = Arrays.asList("03/11/2040", 
                                       "03/11/2041", 
                                       "03/11/2042", 
                                       "03/11/2999", 
                                       "03/11/3000");
	
	DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
	df.setLenient(false);
	
	for(String data : datas){
		System.out.println(df.parse(data));
	}
	
}
Imprimiu:
Sat Nov 03 00:00:00 GMT-03:00 2040
Sun Nov 03 00:00:00 GMT-03:00 2041
Mon Nov 03 00:00:00 GMT-03:00 2042
Sun Nov 03 00:00:00 GMT-03:00 2999
Mon Nov 03 00:00:00 GMT-03:00 3000
Sem nenhuma exceção.
fabim

Problema de JDK será?

Rodrigo_Sasaki

Não sei hehehe, mas foi estranho o suficiente pra me fazer querer testar :slight_smile:

Eu uso a versão 1.7.0_05 da JDK da Oracle mesmo.

Testei com a última versão da JDK 1.6 que tinha aqui e obtive o mesmo resultado.

fabim

Rodrigo, copiei e colei seu exemplo, e deu pau no 2041. Uso a JDK 5

E

Puxa, a Oracle não dá mais suporte (exceto pago) para o JDK 5 :frowning:

Criado 5 de julho de 2013
Ultima resposta 5 de jul. de 2013
Respostas 6
Participantes 3