Data por extenso

8 respostas
sandokandias

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:

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

8 Respostas

cassio

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!

javaBeats

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

sandokandias

mano, muito obrigado, deu certo !

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

sandokandias

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

javaBeats

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]

sandokandias

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

guerios

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

javaBeats

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

Criado 20 de agosto de 2006
Ultima resposta 21 de ago. de 2006
Respostas 8
Participantes 4