Baderous Posted June 18, 2008 at 09:32 PM Report Share #192048 Posted June 18, 2008 at 09:32 PM 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 More sharing options...
Knitter Posted June 18, 2008 at 10:00 PM Report Share #192059 Posted June 18, 2008 at 10:00 PM 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. www.sergiolopes.eu Link to comment Share on other sites More sharing options...
Baderous Posted June 18, 2008 at 10:15 PM Author Report Share #192064 Posted June 18, 2008 at 10:15 PM 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 More sharing options...
Rui Carlos Posted June 18, 2008 at 10:48 PM Report Share #192073 Posted June 18, 2008 at 10:48 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Baderous Posted June 18, 2008 at 10:59 PM Author Report Share #192076 Posted June 18, 2008 at 10:59 PM Era exactamente isso Rui Carlos. 😉 Link to comment Share on other sites More sharing options...
pedrosorio Posted June 19, 2008 at 12:42 PM Report Share #192142 Posted June 19, 2008 at 12:42 PM 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 More sharing options...
magician Posted June 19, 2008 at 12:50 PM Report Share #192145 Posted June 19, 2008 at 12:50 PM 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. I haven’t lost my mind; it’s backed up on DVD somewhere! Link to comment Share on other sites More sharing options...
Rui Carlos Posted June 19, 2008 at 01:00 PM Report Share #192152 Posted June 19, 2008 at 01:00 PM 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... Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Knitter Posted June 19, 2008 at 01:22 PM Report Share #192161 Posted June 19, 2008 at 01:22 PM 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. www.sergiolopes.eu Link to comment Share on other sites More sharing options...
magician Posted June 19, 2008 at 05:16 PM Report Share #192198 Posted June 19, 2008 at 05:16 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now