[DUVIDA]Diferença entre Calendar e Gregorian Calendar

Boa tarde pessoal, gostaria de saber qual a real diferença entre calendar e gregorian calendar.

Agradeço a todos que puderem ajudar!

[]'s

Calendar é uma classe Abstrata que possui algumas informações genéricas. Por Calendar ser abstrata vc nao consegue instanciá-la.

GregorianCalendar é uma classe concreta que extende Calendar e possui algumas informações adicionais específicas

[quote=leonickel]Calendar é uma classe Abstrata que possui algumas informações genéricas. Por Calendar ser abstrata vc nao consegue instanciá-la.

GregorianCalendar é uma classe concreta que extende Calendar e possui algumas informações adicionais específicas

[/quote]

Quando usar uma e outra?

[quote=Henrique Fernandes][quote=leonickel]Calendar é uma classe Abstrata que possui algumas informações genéricas. Por Calendar ser abstrata vc nao consegue instanciá-la.

GregorianCalendar é uma classe concreta que extende Calendar e possui algumas informações adicionais específicas

[/quote]

Quando usar uma e outra?[/quote]

A classe GregorianCalendar é mto usada para criar uma data passada, pois qndo vc dá um new vc pode passar como argumentos o ano, mes, dia, etc…, já a classe Calendar como vc nao consegue instanciá-la, ela acaba sendo usada mais para efeito de polimorfismo

Calendar cal = Calendar.getInstance(); este código irá retornar um Objeto GregorianCalendar com a data atual;

Calendar cal2 = new GregorianCalendar(2008, Calendar.JULY, 15) este código irá retornar um objeto GregorianCalendar com a data que foi passada como argumento

Fique sempre o mais abstrato possível. Prefira interfaces. Se não tiver, Classes abstratas.
Usar implementações são exceções. Caso haja uma real necessidade.

Veja no ótimo exemplo de nosso amigo leonickel. Embora esteja usando a implementação GregorianCalendar, sua variável é do tipo Calendar.

Se houver uma classe/método Factory (como Calendar.getInstance()), use-a, pelo mesmo motivo: quanto menos dependente de implementação seu código for, melhor.

Uma alternativa a usar o GregorianCalendar diretamente é user o métdo set():

Calendar cal = Calendar.getInstance(); cal.set(2008, Calendar.JULY, 15);

Calendar representa um calendário genérico.
GregorianCalendar representa o nosso calendário, utilizado no nosso dia-a-dia.

Entretanto, não existe somente nosso calendário. Você poderia querer trabalhar com o padrão Juliano, com o calendário judeu, ou com outro formato de calendário, criado por você (como as datas em Klingon, por exemplo).

Por isso, define-se uma interface de uso comum, Calendar, que permite que um programa manipule um calendário qualquer. E também define-se as suas implementações, para os diversos tipos de calendário.

A implementação da Sun, a respeito de calendários é extremamente falha. Esse modelo não só não atende o problema, como torna seu código extremamente complexo e rebuscado. Já que você está trabalhando com datas, considere com carinho a possibilidade de implementar uma API como o JODA-Time.