0

Exercícios Resolvidos - Datas - Curso Java Básico

Tássio Costa
Tássio Costa

[Exercício 01]

Descrição

Descubra o timeInMillis do dia que você nasceu;

Converta em um objeto Date;

Verifique se ele é anterior ou posterior ao dia 15 de Maio de 2010.


Solução:

Para descubrir o tempo em milissegundos do seu dia de nascimento, converta a data de seu nascimento para milissegundos usando a seguinte ferramenta: https://currentmillis.com/

Agora atribua ao atributo currentTimeMillis do código abaixo o valor de sua data de nascimento em milissegundos:

Long currentTimeMillis = 787460400000L; // 15/12/1994

Date birthDay = new Date(currentTimeMillis);

Date referenceDate = new Date(1273892400000L); // 15/05/2010

boolean isAfter = birthDay.after(referenceDate);
boolean isBefore = birthDay.before(referenceDate);

String str = isAfter ? "is after" : "is before";
System.out.println(birthDay + " " + str + " to " + referenceDate);

Pronto, resolvido.


[Exercício 02]

Descrição

Um cliente tem 10 dias para pagar uma fatura após sua data de vencimento sem que os juros sejam cobrados.

Caso essa data caia em um sábado ou domingo, o cliente pode pagar na segunda-feira seguinte.

Crie uma estrutura que receba uma data de vencimento e calcule quantos dias ele tem para pagar.


Solução:

Passo 01: Implementação do método para ler um data como uma String a partir do console. É obrigatório que o usuário informe a data de acordo com o formato proposto.

public static String readDate() {
  Scanner scanner = new Scanner(System.in);
  System.out.println("Enter with the due date in the format dd/MM/yyyy:");
  String date = scanner.nextLine();
  scanner.close();
  return date;
}

Passo 02: Implementação do método para validar a data informada pelo usuário e convertê-la para o tipo Date.

public static Date validateDate(String date) {
  Date dateValidated = null;
  try {
    String dateFormat = "dd/MM/yyyy";
    DateFormat df = new SimpleDateFormat(dateFormat);
    df.setLenient(false);
    dateValidated = df.parse(date);
  } catch (IllegalArgumentException e) {
  	System.out.println("Invalid Pattern!");
  } catch (ParseException e) {
  	System.out.println("Invalid Pattern! The pattern is dd/MM/yyyy");
  }
  return dateValidated;
}

Passo 03: Implementação do método para converter a data validada do tipo Date para o tipo Calendar.

public static Calendar dateToCalendar(Date date) {
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(date);
  return calendar;
}

Passo 04: Implementação do método para contar os dias que falta para o pagamento com base numa data do tipo Calendar e nas regras de negócios (RN) apontadas na descrição do problema.

RN001: Tempo máximo para um cliente para a fatura após vencimento é 10 dias.

RN002: Se a data final de pagamento cair no sábado o tempo máximo deve ser prorrogado em 2 dias.

RN003: Se a data final de pagamento cair no domingo o tempo máximo deve ser prorrogado em 1 dias.

public static int countDaysToPay(Calendar calendar) {
  int countDaysToPay = 10;
  calendar.add(Calendar.DATE, countDaysToPay);
  
  int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
  
  countDaysToPay += dayOfWeek == 1 ? 1 : 0;
  countDaysToPay += dayOfWeek == 7 ? 2 : 0;
  
  return countDaysToPay;
}

Passo 05: Implementação do método main.

public static void main(String[] args) {
  String date = readDate();
  Date validateDate = validateDate(date);  
  
  try {
  	Calendar calendar = dateToCalendar(validateDate);
  	int countDays = countDaysToPay(calendar);
  	System.out.println("You have " + countDays + " days to pay your card bill");
  } catch (Exception e) {}
}

Pronto, resolvido.


[Exercício 03]

Descrição

Converta a data atual no formato DD/MM/YYYY HH:MM:SS:MMM.


Solução:

Utilize a classe SimpleDateFormat para definir o formato desejado.

public static void main(String[] args) {
  Date date = new Date();
    
  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss:mmm");
    
  String dateStr = simpleDateFormat.format(date);
    
  System.out.println(dateStr);
}

Pronto, resolvido.


[Exercício 04]

Descrição

Adicione 4 anos, 6 meses e 13 horas ao momento 15/05/2010 10:00:00.


Solução:

Utilize a classe LocalDateTime para criar o momento sobre o qual serão feito as adições de tempo.

public static void main(String[] args) {
  LocalDateTime localDateTime = LocalDateTime.of(2010, 5, 15, 10, 0, 0);
    
  LocalDateTime future = localDateTime.plusYears(4).plusMonths(6).plusHours(13);
    
  System.out.println(format(localDateTime));
    
  System.out.println(format(future));
}

Método para formatação de um objeto LocalDateTime a partir de um padrão de formato pré-definido.

public static String format(LocalDateTime localDateTime) {
  return localDateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"));
}

Pronto, resolvido.


[Referências]

https://medium.com/marcopollivier/java-basico-trabalhando-com-datas-70c4cb75e0f5

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#SimpleDateFormat(java.lang.String)

https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#parse(java.lang.String)


Até breve. Comentem, curtam, critiquem e compartilhem.

0
0

Comentários (1)

Bacharel em TI | Graduando em Engenharia de Software

Brasil