Data por extenso

Pessoal,
to tentando formatar a data atual por extenso, eu até consegui formatar direitim, o problema é que fica sempre “Sábado 20 de Dezembro de 2006”, sendo que hoje é Domingo 20 de Agosto, oq pode esta acontecendo ? Segue meu code:

[code]public String getHoje(){
String diaf = null;
String mesf = null;
String retorno = null;
Calendar calendar = new GregorianCalendar();
Date hoje = new Date();
calendar.setTime(hoje);
int semana = calendar.get(Calendar.DAY_OF_WEEK);
int mes = calendar.get(Calendar.MONTH);
int dia = calendar.get(Calendar.DAY_OF_MONTH);
int ano = calendar.get(Calendar.YEAR);

// semana
switch(semana){
 case 1: diaf = "Domingo";
 case 2: diaf = "Segunda";
 case 3: diaf = "Terça";
 case 4: diaf = "Quarta";
 case 5: diaf = "Quinta";
 case 6: diaf = "Sexta";
 case 7: diaf = "Sábado";
}
// mês
switch(mes) {
 case 1:  mesf = "Janeiro";
 case 2:  mesf = "Fevereiro";
 case 3:  mesf = "Março";
 case 4:  mesf = "Abril";
 case 5:  mesf = "Maio";
 case 6:  mesf = "Junho";
 case 7:  mesf = "Julho";
 case 8:  mesf = "Agosto";
 case 9:  mesf = "Setembro";
 case 10: mesf = "Outubro";
 case 11: mesf = "Novembro";
 case 12: mesf = "Dezembro";
}
retorno = diaf+", "+dia+" de "+mesf+", de "+ano;
return retorno;

} [/code]

Acho que é porque estão faltando os “breaks” no seus switch!
Assim ele vai sempre fazer todas as operações… parando na última, que é extamenjte sábado para o switch dos dias da semana e em dezembro para o switch dos meses!

Tenta assim:

// semana
 	switch(semana){
 	 case 1: diaf = "Domingo"; break;
 	 case 2: diaf = "Segunda"; break;
 	 case 3: diaf = "Terça";  break;
 	 case 4: diaf = "Quarta"; break;
 	 case 5: diaf = "Quinta"; break;
 	 case 6: diaf = "Sexta"; break;
 	 case 7: diaf = "Sábado"; break;
 	}
 	// mês
 	switch(mes) {
 	 case 1:  mesf = "Janeiro"; break;
 	 case 2:  mesf = "Fevereiro"; break;
 	 case 3:  mesf = "Março"; break;
 	 case 4:  mesf = "Abril"; break;
 	 case 5:  mesf = "Maio"; break;
 	 case 6:  mesf = "Junho"; break;
 	 case 7:  mesf = "Julho"; break;
 	 case 8:  mesf = "Agosto"; break;
 	 case 9:  mesf = "Setembro"; break;
 	 case 10: mesf = "Outubro"; break;
 	 case 11: mesf = "Novembro"; break;
 	 case 12: mesf = "Dezembro"; break;
 	}

Abraço! Diz ai e seu funcionou!

O método toString(), da classe java.util.Date, já não retorna a data por extenso? Se sim, é só ajustar o Locale…

Se por acaso este toString() vier com informação de hora também, e você não as queira, creio ser possível usar um pattern apropriado com DateFormat para conseguir este efeito.

Rodrigo

mano, muito obrigado, deu certo !

me falta conceito ainda em JAVA, mas um dia chego la…

Existe uma maneira mais prática e com menos código para fazer isso ?

Claro!

import java.text.*;
import java.util.*;

public class Test {
    
    public static void main(String args[]) {
        
        DateFormat dfmt = new SimpleDateFormat("EEEE, d MMMM yyyy");
        Date hoje = Calendar.getInstance(Locale.getDefault()).getTime();
        System.out.println(dfmt.format(hoje));
        
    }
}

Mais patterns na javadoc :wink:

[edit: um resumo prático da javadoc: http://fmpp.sourceforge.net/datetimepattern.html]

Kara valew mesmo, eu ainda to aprendendo a linguagem, tenho muitos vícios. Dessa maneira que você posto aqui é muito mais interessante…

Infelizmente o resultado do código sugerido ainda não é o que se quer.

O resultado acima daria hoje Segunda-feira, 21 Agosto 2006.

Estou tendo o mesmo problema pois gostaria que tivesse Segunda-feira, 21 de Agosto de 2006

Então teriamos o código abaixo que dá o resultado do jeito que se quer

import java.text.;
import java.util.
;

public class Test {

 public static void main(String args[]) {
     
     DateFormat dfmt = new SimpleDateFormat("EEEE, d 'de' MMMM 'de' yyyy");
     Date hoje = Calendar.getInstance(Locale.getDefault()).getTime();
     System.out.println(dfmt.format(hoje));
     
 }

}

Abraço

Yep, como explicado no link que eu ofereci, todas as patterns (E, M, etc), que renderizam texto, se colocadas com extensão de 4 caracteres, renderizam o valor inteiro. Dessa forma, EEE renderizaria “Ter”, “Qua”, “Qui”, e EEEE renderiza “Terça”, “Quarta”, “Quinta”.

Deixei o link que é para o garoto estudar e escolher o que melhor se aplica ao caso dele :wink:

Rodrigo