Funçao java

Estou em dúvida de como faço a questão a seguir, se alguém pudesse resolver e compartilhar os códigos eu ficaria muito agradecida!

Questão: faça uma funçao que receba a data atual (dia, mês, ano) e exibi-a na tela no formato textual por extenso. Exemplo: Data: 01/01/2000, imprimir: 1 de janeiro de 2000.

1 curtida

Da uma olhada nesse site, o que vc precisa ta no final da pagina

https://www.w3schools.com/java/java_date.asp

2 curtidas

Depende de como você recebe a data. Serão 3 números separados? Será uma string no formato “dia/mês/ano”?

No primeiro caso, se estiver usando Java >= 8, basta usar java.time.format.DateTimeFormatter juntamente com java.time.LocalDate:

int dia = 1, mes = 1, ano = 2000;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d 'de' MMMM 'de' uuuu", new Locale("pt", "BR"));
System.out.println(formatter.format(LocalDate.of(ano, mes, dia))); // 1 de Janeiro de 2000

Só que “Janeiro” ficou com “J” maiúsculo, já que os nomes dos meses estão built-in na JVM (embora possa variar de acordo com a versão, pois essas informações podem ser atualizadas conforme a versão do JDK). Também usei o java.util.Locale com o valor “pt-BR” que corresponde ao português do Brasil, assim o nome do mês fica no idioma correto (sem especificar o locale, ele usará o default que está configurado na JVM, e não é garantido que seja português - pode até ser, mas é melhor especificar um se você quer sempre naquele idioma).

Se quiser que sempre seja com letra minúscula, é possível sobrescrever os valores built-in, usando um Map com valores específicos:

int dia = 1, mes = 1, ano = 2000;
Map<Long, String> meses = new HashMap<Long, String>();
meses.put(1L, "janeiro");
meses.put(2L, "fevereiro");
// ... colocar todos os valores, até dezembro
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("d 'de' ")
    .appendText(ChronoField.MONTH_OF_YEAR, meses) // usa os valores do Map para o mês
    .appendPattern(" 'de' uuuu")
    .toFormatter(new Locale("pt", "BR"));
System.out.println(formatter.format(LocalDate.of(ano, mes, dia))); // 1 de janeiro de 2000

Por fim, se você recebe a data como uma String no formato “dia/mês/ano”, aí você precisa de outro DateTimeFormatter para criar a data (e depois você usa um dos métodos acima para formatá-la):

DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/uuuu");
LocalDate data = LocalDate.parse("01/01/2000", parser);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d 'de' MMMM 'de' uuuu", new Locale("pt", "BR"));
System.out.println(formatter.format(data)); // 1 de Janeiro de 2000
1 curtida
/* Retorna a data por extenso com cidade e dia da semana, se a data for inválida assume data do sistema
    * Modos de usar:
        try {
            jLabel1.setText(DataPorExtenso("Foz do Iguaçu", true, data.getText()));   retorna Foz do iguaçu, sabado, 31 de outubro de 2020
            String teste=DataPorExtenso("Foz do Iguaçu", true, data.getText());
            JOptionPane.showMessageDialog(this, DataPorExtenso("Cascavel", true, data.getText()), "Atençao", JOptionPane.INFORMATION_MESSAGE);  
        } catch (ParseException ex) {
            Logger.getLogger(NovoJFrame.class.getName()).log(Level.SEVERE, null, ex);
        } 
    * Parametros:  
      - nome da cidade ou ""
      - dia da semana true ou false
      - data. Se for data em branco retorna data atual      
    */
    @SuppressWarnings("deprecation")
    public static String DataPorExtenso(String cidade, boolean diaDaSemana, String data) throws ParseException { 
        Date dt;
        String fdate;
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        if("".equals(data)){
            dt = stringToDate(sdf.format(new Date())); //(Date)sdf.parse(fdate); // formata a data e converte para Date
        } else {
            dt=stringToDate(data);
        }
        int d = dt.getDate();
        int m = dt.getMonth()+1;
        int a = dt.getYear()+1900;
        Calendar datas = new GregorianCalendar(a, m-1, d);
        int ds = datas.get(Calendar.DAY_OF_WEEK);
            if(cidade.equals("")){
                if(diaDaSemana==false){
                return(DiaDaSemana(ds, 0) + ", "+ d + " de " + NomeDoMes(m, 0) + " de " + a) ;
            }else {
                return(d + " de " + NomeDoMes(m, 0) + " de " + a) ;
            }  
        }else{
            if(diaDaSemana==true){
                return(cidade + " " + DiaDaSemana(ds, 0) + ", " + d + " de " + NomeDoMes(m, 0) + " de " + a) ;
            }else {
                return(cidade +", "+ d +" de " + NomeDoMes(m, 0) + " de " + a) ;
            } 
        }
    }
1 curtida