• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Baderous

GregorianCalendar: mês e dia

10 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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... ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por essas coisas é que passei as usar o Date e Calendar nunca mais mexi no raio do GregorianCalendar, depois tens montes de APIs que fazer o format input e output para os dates até te faz os acerto do meses e tudo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por essas coisas é que passei as usar o Date e Calendar nunca mais mexi no raio do GregorianCalendar, depois tens montes de APIs que fazer o format input e output para os dates até te faz os acerto do meses e tudo.

Parece-me que o Calendar tem o mesmo problema...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me que o Calendar tem o mesmo problema...

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora