Jump to content

GregorianCalendar: mês e dia


Baderous

Recommended Posts

Estou a fazer um exercício básico de manipulação de instâncias de GregorianCalendar.

public static void main(String[] args) {
        GregorianCalendar inicio = new GregorianCalendar();
        inicio.set(GregorianCalendar.YEAR,2007);
        inicio.set(GregorianCalendar.MONTH,3);
        inicio.set(GregorianCalendar.DAY_OF_MONTH,8);
        inicio.set(GregorianCalendar.HOUR,12);
        inicio.set(GregorianCalendar.MINUTE,20);
        inicio.set(GregorianCalendar.SECOND,33);
        inicio.set(GregorianCalendar.MILLISECOND,111);
        GregorianCalendar fim = new GregorianCalendar();
        fim.set(GregorianCalendar.YEAR,2007);
        fim.set(GregorianCalendar.MONTH,3);
        fim.set(GregorianCalendar.DAY_OF_MONTH,10);
        fim.set(GregorianCalendar.HOUR,22);
        fim.set(GregorianCalendar.MINUTE,12);
        fim.set(GregorianCalendar.SECOND,15);
        fim.set(GregorianCalendar.MILLISECOND,44);
        System.out.printf("Inicio: %1$tY/%1$tm/%1$td - %1$tT%n",inicio);
        System.out.printf("Fim: %1$tY/%1$tm/%1$td - %1$tT%n",fim);

Quando me mostra as datas, o dia do mês e o mês estão incrementados em uma unidade, ou seja, na 1ª data que é: 2007/3/8 aparece 2007/4/9. Isto é algum pormenor da classe GregorianCalendar (ou Calendar) que não estou a encontrar?

Link to comment
Share on other sites

Sinceramente não te sei responder, de certa forma percebo porque é que o mês muda, é que um GregorianCalendar assume os meses com inicio a zero pelo que 3 é Abril, logo ao apresentares vais obter o 4, agora o dia é que não percebo.

Tenta passar os olhos por este link, http://mindprod.com/jgloss/gregoriancalendar.html, pode ser que ajude.

Link to comment
Share on other sites

Os meses percebi, até porque já tinha feito um exercício parecido e tinha precisado de decrementar o mês. Agora o dia acho estranho até porque nesse mesmo exercício, também crio uma instância de GregorianCalendar com um dia escolhido por mim e aparece direito:

GregorianCalendar bads = new GregorianCalendar(ano,mes-1,dia);
System.out.printf("Data de nascimento: %1$td/%1$tm/%1$tY%n",bads);

Ano: 2008

Mês: 4

Dia: 30

Output: 30/04/2008

Link to comment
Share on other sites

Experimenta passar a hora para um valor menor do que 12.

A hora é especificada no sistema AM/PM (sendo o usado o campo AM_PM para indicar se é de manhã ou de tarde). Provavelmente por defeito ele considera como sendo PM, logo, tendo em conta a hora que indicastes, a data passa para o dia seguinte.

Link to comment
Share on other sites

Os meses percebi, até porque já tinha feito um exercício parecido e tinha precisado de decrementar o mês. Agora o dia acho estranho até porque nesse mesmo exercício, também crio uma instância de GregorianCalendar com um dia escolhido por mim e aparece direito:

GregorianCalendar bads = new GregorianCalendar(ano,mes-1,dia);
System.out.printf("Data de nascimento: %1$td/%1$tm/%1$tY%n",bads);

Ano: 2008

Mês: 4

Dia: 30

Output: 30/04/2008

Que egocêntrico... 😉

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Sim, o problema não é só do GregorianCalendar, que afinal é um Calendar, é de todo o sistema de datas.

Se usares o Date, classe que está completamente depracated, então estás a fazer pior, apesar de em algumas situações não existir outra hipótese.

Sim está totalmente depracated mas no que se trata a a trabalhar com datas, genero input e ouput não há melhor depois com classes como DateFormat tarefas desse género são super simples e rápidas. No que toca a manipulação de datas realmente o Date não é o melhor.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.