Gente, estou com dificuldade no desenvolvimento desde código em Java. Alguém poderia me ajudar, por favor.
Alguém pode me ajudar? (datas)
17 Respostas
Como você tentou fazer?
Ainda não conseguir fazer. Não sei por onde começar. @Fefo80
Crie uma string dataDigitada e pegue o que o usuário digitar.
Depois mostre na tela uma pergunta “qual formato de saída desejado?”
Pegue a resposta e jogue no switch.
Para pegar o formato desejado, é só usar a função substring na string dataDigitada.
Tenta aí e posta aqui o resultado.

@Fefo80
Esse é meu primeiro semestre e já estou arrependida de ter entrado no curso. Além disso, as aulas são online, ai que eu não entendo mesmo, e pra trocar de curso tenho que cursar esse semestre. De verdade, não sei por onde começar. 
Vamos começar pelo básico: o que você sabe?
Vamos construir a partir do que você sabe, fique tranquilo.
import java.util.*;
public class MinhaData
{
private String nome;
private Data dataDelancamento;
public void setLancamento (Date data)
{
this.lancamento = data;
}
SimpleDateFormat formato = new Simple
DateFormat (“dd/mm/yyyy”);
Date data = formato.parse(“23/11/2020)”;System.out.println(formato.format(data));
}
Comecei assim, mas não sei se é. @Fefo80
Existem várias formas de fazer. Vou postar abaixo uma, e você tenta completar o código, combinado?
E depois tente fazer com essa forma do SimpleDateFormat etc.
Ok?
import java.util.Scanner;
public class MinhaData {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
String data;
do {
System.out.print("Digite a data, no formato dd/mm/aaaa: ");
data = entrada.nextLine();
if (data.length() != 10) {
System.out.println("\n\nData digitada no formato errado! Tente de novo\n\n");
}
} while (data.length() != 10);
System.out.println("\nEscolha o formato de saída!");
System.out.println("Para DD/MM/AA digite 1");
System.out.println("Para MM/AAAA digite 2");
System.out.println("MM/DD/AAAA");
System.out.println("E para DD/MES_POR_EXTENSO/AAAA digite 4");
System.out.print("\nQual sua escolha? ");
int escolha = Integer.parseInt(entrada.nextLine());
while (escolha < 1 && escolha > 4) {
System.out.println("\nValor inválido, tente novamente!\n");
System.out.println("Escolha o formato de saída:");
System.out.println("Para DD/MM/AA digite 1");
System.out.println("Para MM/AAAA digite 2");
System.out.println("MM/DD/AAAA");
System.out.println("E para DD/MES_POR_EXTENSO/AAAA digite 4");
System.out.print("\nQual sua escolha? ");
escolha = Integer.parseInt(entrada.nextLine());
}
switch (escolha) {
case 1:
System.out.print("\nResultado: " + data.substring(0, 2) + "/" + data.substring(3, 5) + "/" + data.substring(8, 10) + "\n");
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
break;
}
entrada.close();
}
}
Ok @Fefo80 Muito obrigado, me ajudou muito com seus conhecimentos, quem entende é outro nivel. 



Muito Obrigado mesmo, vou tentar fazer de outra forma, pode deixar.
Depois posta aí como ficou.
Seja bem vinda ao fórum! Um lugar de conhecimento e interação, com pessoas sempre com a intenção de ajudar quem está disposto.
E, quando for mais experiente, por favor sinta-se convidada a retornar ao fórum para ajudar aos novatos.
Oi, @Fefo80 bom dia.
Eu estava tentando modificar o código, porém não conseguir muito. Como eu disse estou iniciando e estou com algumas dificuldades.
Na opção de selecionar um formato, apenas o 1 rodava, modifiquei e conseguir fazer o 2 funcionar, porem não conseguir mais, dava erros constantes. Na escolha 4, o resultado sai: 10/Wed Mar 24 + as horas + GMT-03 2021/20.
Tem que ficar 31/outubro/2020
Eu modifiquei a parte do switch. Porem começa a da erros tbm.
import java.util.Scanner;
import java.util.Calendar;
public class MinhaData {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
String data;
do {
System.out.print("Digite a data, no formato DD/MM/AAAA: ");
data = entrada.nextLine();
if (data.length() != 10) {
System.out.println("\n\nData digitada no formato errado! Tente de novo\n\n");
}
} while (data.length() != 10);
System.out.println("\nEscolha o formato de saída:");
System.out.println(“Para DD/MM/AA, digite 1”);
System.out.println(“Para MM/AAAA, digite 2”);
System.out.println(“Para MM/DD/AAAA, digite 3”);
System.out.println(“E para DD/MES_POR_EXTENSO/AAAA, digite 4”);
System.out.print("\nQual sua escolha? ");
int escolha = Integer.parseInt(entrada.nextLine());
while (escolha < 1 && escolha > 4) {
System.out.println("\nValor inválido, tente novamente!\n");
System.out.println(“Escolha o formato de saída:”);
System.out.println(“Para DD/MM/AA, digite 1”);
System.out.println(“Para MM/AAAA, digite 2”);
System.out.println(“MM/DD/AAAA, digite 3”);
System.out.println(“E para DD/MES_POR_EXTENSO/AAAA, digite 4”);
System.out.print("\nQual sua escolha? ");
escolha = Integer.parseInt(entrada.nextLine());
}
switch (escolha) {
case 1:
System.out.print("\nResultado: " + data.substring(0, 2) + “/” + data.substring(3, 5) + “/” + data.substring(8, 10) + “\n”);
break;
case 2:
System.out.print("\nResultado: " + data.substring(0, 2) + “/” + data.substring(8, 10) + “\n”);
break;
case 3:
System.out.print("\nResultado: " + data.substring(3, 5) + “/” + data.substring(0, 2) + “/” + data.substring(8, 10) + “\n”);
break;
case 4:
System.out.print("\nResultado: " + data.substring(0, 2) + “/” + data.substring(0, 2) + “/” + data.substring(8, 10) + “\n”);
break;
default:
break;
}
entrada.close();
}
}
@Halsey qual erro que deu?
Ah… lembra sempre de formatar teu código, quando postar aqui.
Olhando a documentação da classe Calendar que você chamou - https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html - veremos que ela pode exportar nos seguintes formatos:
For the date fields:
YEAR + MONTH + DAY_OF_MONTH YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK YEAR + DAY_OF_YEAR YEAR + DAY_OF_WEEK + WEEK_OF_YEARFor the time of day fields:
HOUR_OF_DAY AM_PM + HOUR
Se quiser ler um pouco mais sobre o Calendar, olha aqui: https://www.javatpoint.com/java-util-calendar
No Devmedia explica como você pode jogar em português: https://www.devmedia.com.br/trabalhando-com-as-classes-date-calendar-e-simpledateformat-em-java/27401
Um plano B, se você não conseguir fazer com os links acima, você pode fazer com SWITCH ou com IF, testando o mês e colocando o nome. Não é a melhor forma, mas funciona.
Se não conseguir fazer, me avisa.
Vou ler esses links e tentar fazer de novo.
Qualquer coisa eu volto aqui e lhe aviso se conseguir.
Se a ideia é validar datas, não use substring, pois aí você só estará pegando pedaços da string, sem saber se de fato foi digitado uma data.
Por exemplo, se eu digitar abcdefghij, e depois escolher a opção 3, o resultado foi de/ab/ij.
Você tinha usado SimpleDateFormat (que eu só recomendaria se estiver usando Java <= 7, pois a partir do Java 8 tem um jeito melhor), então estava no caminho certo. De qualquer forma, segue abaixo soluções com ambas.
A ideia é usar um formatador/parser para validar a entrada, e outro para formatar a saída.
Para Java >= 8, prefira usar a API java.time. No caso, como a data só tem dia, mês e ano, a melhor opção é a classe java.time.LocalDate:
Scanner entrada = new Scanner(System.in);
DateTimeFormatter formatoEntrada = DateTimeFormatter.ofPattern("dd/MM/uuuu").withResolverStyle(ResolverStyle.STRICT);
LocalDate data;
while (true) {
System.out.print("Digite a data, no formato DD/MM/AAAA: ");
try {
data = LocalDate.parse(entrada.nextLine(), formatoEntrada);
break; // se a data for válida, sai do while
} catch (DateTimeParseException e) {
System.out.println("Data no formato inválido, deve ser DD/MM/AAAA");
}
}
// formatos válidos
List<DateTimeFormatter> formatos = new ArrayList<>();
formatos.add(DateTimeFormatter.ofPattern("dd/MM/uu"));
formatos.add(DateTimeFormatter.ofPattern("MM/uuuu"));
formatos.add(DateTimeFormatter.ofPattern("MM/dd/uuuu"));
formatos.add(DateTimeFormatter.ofPattern("dd/MMMM/uuuu", new Locale("pt", "BR")));
int escolha;
while (true) {
System.out.println("Escolha o formato de saída:");
System.out.println("Para DD/MM/AA, digite 1");
System.out.println("Para MM/AAAA, digite 2");
System.out.println("MM/DD/AAAA, digite 3");
System.out.println("E para DD/MES_POR_EXTENSO/AAAA, digite 4");
System.out.print("\nQual sua escolha? ");
try {
escolha = Integer.parseInt(entrada.nextLine());
if (1 <= escolha && escolha <= 4) {
DateTimeFormatter formatoSaida = formatos.get(escolha - 1);
System.out.println(formatoSaida.format(data));
break; // sai do while
} else {
System.out.println("Formato inválido");
}
} catch (NumberFormatException e) {
System.out.println("Você não digitou um número");
}
}
// não precisa fechar o System.in
Usei o ResolverStyle.STRICT porque assim ele não deixa digitar datas como 31 de fevereiro (sem isso, esta data seria ajustada para dia 28).
Para o nome do mês usei o Locale correspondente ao português do Brasil, assim o DateTimeFormatter já pega os nomes corretos.
Para código novo com as versões mais recentes da linguagem (na verdade qualquer uma acima do Java 8), eu recomendo aprender o java.time, que é a API mais moderna e que corrige vários problemas de Date, Calendar e SimpleDateFormat.
Mas se estiver usando Java <= 7, pode fazer assim:
Scanner entrada = new Scanner(System.in);
SimpleDateFormat formatoEntrada = new SimpleDateFormat("dd/MM/yyyy");
formatoEntrada.setLenient(false); // para não aceitar datas inválidas
Date data;
while (true) {
System.out.print("Digite a data, no formato DD/MM/AAAA: ");
try {
data = formatoEntrada.parse(entrada.nextLine());
break; // se a data for válida, sai do while
} catch (ParseException e) {
e.printStackTrace();
System.out.println("Data no formato inválido, deve ser DD/MM/AAAA" );
}
}
// formatos válidos
List<SimpleDateFormat> formatos = new ArrayList<>();
formatos.add(new SimpleDateFormat("dd/MM/yy"));
formatos.add(new SimpleDateFormat("MM/yyyy"));
formatos.add(new SimpleDateFormat("MM/dd/yyyy"));
formatos.add(new SimpleDateFormat("dd/MMMM/yyyy", new Locale("pt", "BR")));
int escolha;
while (true) {
System.out.println("Escolha o formato de saída:");
System.out.println("Para DD/MM/AA, digite 1");
System.out.println("Para MM/AAAA, digite 2");
System.out.println("MM/DD/AAAA, digite 3");
System.out.println("E para DD/MES_POR_EXTENSO/AAAA, digite 4");
System.out.print("\nQual sua escolha? ");
try {
escolha = Integer.parseInt(entrada.nextLine());
if (1 <= escolha && escolha <= 4) {
SimpleDateFormat formatoSaida = formatos.get(escolha - 1);
System.out.println(formatoSaida.format(data));
break; // sai do while
} else {
System.out.println("Formato inválido");
}
} catch (NumberFormatException e) {
System.out.println("Você não digitou um número");
}
}
@Fefo80 boa noite, não conseguir fazer.
Tentei modificar pra rodar todas as opções de uma vez, e não conseguir tbm.
@Halsey tentou o que o Hugo mostrou acima?
Boa noite. E aí, deu certo?