Sobre o GregorianCalendar

10 respostas
MiguelCP

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???

10 Respostas

rodrigoallemand

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

rodrigoallemand

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()); }

MiguelCP

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.

rodrigoallemand

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.

T

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));
    }
}
MiguelCP

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.

L

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.

T

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

L

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

L
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

Criado 29 de novembro de 2007
Ultima resposta 7 de jul. de 2008
Respostas 10
Participantes 4