Sobre o GregorianCalendar

estou fazendo uma especie de cadastro e utilizo o gregorainclaendar pra ele imprimir na tela a data e hora só que quando aparece na tela ele nunca está certo por exemplo

System.out.println(“Horas : " + GregorianCalendar.HOUR_OF_DAY +”:" + GregorianCalendar.MINUTE +":" + GregorianCalendar.SECOND);
System.out.println("=======================");
System.out.println(“Dia : " + GregorianCalendar.DATE + “/” +(GregorianCalendar.NOVEMBER + 1)+”/" + “2007”);
}

na tela isso aparece assim:

Horas : 11:12:13

Dia : 5/11/2007

só fica aparecendo esse 11 horas e o 5 da date o que eu posso fazer pra ele imprimir certo???

Essa foi boa… hehehe

As constantes do GregorianCalendar são inteiros que servem como chaves para algumas funções…
Com isso, GregorianCalendar.HOUR_OF_DAY sempre retornará 11…

Vc deve pegar a instancia do calendário que já vem com a data corrente do sistema.

Calendar calendar = GregorianCalendar.getInstance();//Neste momento vc já tem a data corrente System.out.println(calendar.getTime());//Este método retorna um java.util.Date preenchido com a data corrente calendar.set(Calendar.MONTH, 1);//Aqui vc seta o mês para 1, usando as taus constantes

Vc pode usar um método como esse…

public String todayToString(){ String pattern= "dd/MM/yyyy HH:mm:ss"; return new SimpleDateFormat(pattern).format(GregorianCalendar.getInstance().getTime()); }

Obrigado mesmo, eu nao sabia mexer com isso mais teve um dia que tive curiosidade pense quebrei tanto a cabeça mais foi bom assim eu aprendo cada vez mais, agora a sua segunda citação(no metodo) e uma quebra né?? tipow mais organizado quebrado cada parte por exemplo:
Friday 30 de novembro
as 12:30
né isso???

e obriga mais uma vez.

Na verdade, quem faz essa divisão é uma classe chamada SimpleDateFormat, que vc pode configurar pra escrever o que vc quizer nela, conforme descrito neste link.
Ela trabalha com substituição. Portanto, tudo que ela não encontrar nas suas referencias ela vai manter como texto.

Só recomendo o uso de GregorianCalendar e seus amigos se você, por algum motivo, não puder usar a Joda Time.

http://joda-time.sourceforge.net/

Uma coisa boba, como saber a diferença entre duas datas, torna-se um parto se você não puder usar a Joda Time.

Vou dar um exemplo: quero saber a diferença de datas entre 07 de setembro de 1822 e 11 de setembro de 2001.

Como você deve saber, há um monte de anos bissextos entre essas datas, e se você simplesmente usar o java.util.Date e fizer algumas contas, vai ter um resultado que tem diferença de horas porque o horário de verão é levado em conta.
Mas não é isso que você quer saber. Você quer saber o resultado que é bastante simples de obter intuitivamente (2001 - 1822 = 179 anos, 11 - 7 = 4 dias).

import org.joda.time.*;
import org.joda.time.format.*;

class TesteJodaTime2 {
    public static void main(String[] args) {
        // 07 de setembro de 1822
	DateTime start = new DateTime(1822, 9, 7, 0, 0, 0, 0);
        // 11 de setembro de 2001
	DateTime end = new DateTime(2001, 9, 11, 0, 0, 0, 0);
        Period per = new Period (start, end);
        // Isto imprime "179 years and 4 days"
        System.out.println (PeriodFormat.getDefault().print (per));
        // Isto imprime "179 anos, 4 dias, 00:00:00"
        PeriodFormatter pf = new PeriodFormatterBuilder()
            .appendYears()
            .appendSuffix (" ano, ", " anos, ")
            .appendMonths()
            .appendSuffix (" mês, ", " meses, ")
            .appendWeeks() 
            .appendSuffix (" semana, ", " semanas, ")
            .appendDays()
            .appendSuffix (" dia, ", " dias, ")
            .printZeroAlways()
            .minimumPrintedDigits(2)
            .appendHours()
            .appendSeparator(":")
            .appendMinutes()
            .appendSeparator(":")
            .appendSeconds()
            .toFormatter();
        System.out.println (pf.print (per));
    }
}

eu agradeço muito a vcs tiraram minhas duvidas obrigaddo Rodrigo e thingol , vou da uma lida pra aprender melhor o SimpleDateFormat, e melhorar na manipulação de datas, tou começando a manipular banco e assim vou indo pq nao aprende sem pratica ,vlw mesmo, e a forças de vcs é muito bom vlw mesmo.

Olá thingol,

Estava testando o jodatime (para facilitar o desenvolvimento) e para o mesmo código que você forneceu
o período: 03/06/2008 até 02/06/2009 ele imprime 11 meses e 2 dias achei estranho… o correto não seria
11 meses e 29 dias ?

PS: a unica coisa que alterei foi remover a impressão das semanas. o que dava
“11 months, 4 weeks and 2 days”

Obrigado.

11 meses, 4 semanas e 2 dias dá 11 meses e 30 dias, o que realmente é esquisito.

Pois é eu achei até que estava ficando louco mas se vc trocar os valores …

DateTime start = new DateTime(2008, 6, 3, 0, 0, 0, 0);
DateTime end = new DateTime(2009, 6, 2, 0, 0, 0, 0);
Period per = new Period (start, end);
System.out.println (PeriodFormat.getDefault().print (per));
PeriodFormatter pf = new PeriodFormatterBuilder()
    .appendYears()
    .appendSuffix (" ano, ", " anos, ")
    .appendMonths()
    .appendSuffix (" mês, ", " meses, ")
    .appendWeeks()
    .appendSuffix (" semana, ", " semanas, ")
    .appendDays()
    .appendSuffix (" dia, ", " dias, ")
    .printZeroAlways()
    .minimumPrintedDigits(2)
    .appendHours()
    .appendSeparator(":")
    .appendMinutes()
    .appendSeparator(":")
    .appendSeconds()
    .toFormatter();
System.out.println (pf.print (per));

saída:

11 months, 4 weeks and 2 days
11 meses, 4 semanas, 2 dias, 00:00:00