Gente, estou com dificuldade no desenvolvimento desde código em Java. Alguém poderia me ajudar, por favor.
Como você tentou fazer?
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_YEAR
For 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.
Boa noite. E aí, deu certo?