Como posso ler corretamente uma data anterior a 1930 com Gregorian calendar ou outra classe? 
Exemplo : 06/05/1900 fica 11/06/2036.
Alguém já resolveu isto de alguma forma?
Gregorian Calendar anterior a 1930
11 Respostas
Tente usar:
GregorianCalendar calendario = new GregorianCalendar();
calendario.set(Calendar.YEAR, 1900);
calendario.set(Calendar.MONTH, Calendar.MAY);
calendario.set(Calendar.DAY_OF_MONTH, 5);
Valeu!
Agradeço a boa vontade, mas isto define uma data fixa com este ano.
No meu caso, estou lendo datas em uma tabela e entre várias datas lidas, algumas são anteriores a 1930. Estas datas são nascimentos e tenho faixa etária de 1900 a 2003. Preciso ler esta data corretamente da tabela e calcular quantos anos a pessoa tem. O cálculo eu sei como fazer veja rotina abaixo, porém quando o ano é inferior a 1930, a data retorna incorreta.
private double CalculaIdade(String dtnas) {
if ())dtnas.equals(("")
return (0);
GregorianCalendar datahoje = new GregorianCalendar();
double dif = myUtil.getDiffYear(myUtil.getCalendar(dtnas), datahoje);
return (dif);
}
O codigo que esta com problema é o getDiffYear, luiz… posta o codigo desse metodo que fica mais facil 
Cara, o problema é um pouco pior que eu pensava. Verifiquei que quando leio a data na tabela, ela já vem errada. Creio que o problema está no drive SQL. Estou usando o freetds_jdbc.jar e acredito que ele é que converte errado quando atribuo a variável lendo o recordset. Exemplo: String nascimento = rs0.getString(1);
Nesta hora , a variável nascimento já vem errada. antes mesmo de transformá-la para Gregorian Calendar. Conheces outro drive free? Ou será que estou errado quando ao drive ser o culpado?
Pq ao inves de chamar getString vc nao usa getDate ou getTimestamp? Com certeza resolve 
Sem chances. Tentei getString, getDate, getTimestamp e nenhum deles retornou a data correta. Verifiquei que só acontece com datas anteriores a 1910 e não 1930 como havia dito. Mas infelizmente, o problema continua. Aguardo novas dicas. Obrigado.
Nem todo banco suporta colunas datas com amplitude muito grande.
Principalmente se voce usar um campo timestamp, que normalmente é implementado como a diferença de tempo com o epoc (1970).
Se for MS SQL, verifique pelo Query Analyser se o valor não está errado no banco, e pegue o driver JDBC para o SQL Server no site da microsoft. Este driver não é cobrado como um produto separado. Se vc tem licença do SQL Server, vc pode usá-lo sem problemas, e se vc não têm… o que é um peido pra quem tá todo cagado? 
Agradeço, mas minha versão licenciada do SQL é 6.5 e o Drive não roda nesta versão. Foi a primeira coisa que tentei, antes mesmo de pegar o freetds. Estou “caçando” outros drivers para teste.
Vc verificou pelo Query Analyser?
se a data estiver correta no banco, vc pode adicionar a funcao CONVERT do T-SQL na sua consulta SQL e retornar o valor como String(com getString). Se o valor ainda assim vier errado, não dá pra culpar o driver, porque a funcao CONVERT roda no SQL Server.
exemplo: “SELECT CONVERT(char,nome_do_campo_data,103) as ‘data’ from tabela”
retorna data como string no formato DD/MM/YYYY
Deu certo. Muito obrigado.