Menu
CoddyTech

Period e Duration

Parte da seção Lógica e Fluxo do Journey de Java da Coddy. Lição 57 de 59.

Period representa uma quantidade de tempo baseada em datas (anos, meses, dias), enquanto Duration representa uma quantidade baseada em tempo (horas, minutos, segundos).

Crie um período:

Period period = Period.of(1, 2, 15);
// 1 ano, 2 meses, 15 dias

Crie uma duração:

Duration duration = Duration.ofHours(2);
// 2 horas
Duration minutes = Duration.ofMinutes(90);
// 90 minutos

Após executar o código acima, period contém:

P1Y2M15D  // formato ISO-8601

Meça o intervalo entre duas datas com Period.between(). Ele recebe dois valores LocalDate e divide o intervalo em anos, meses e dias:

LocalDate start = LocalDate.of(2024, 1, 15);
LocalDate end = LocalDate.of(2025, 3, 20);
Period p = Period.between(start, end);
p.getYears();   // 1
p.getMonths();  // 2
p.getDays();    // 5

getDays() retorna apenas os dias restantes após considerar os anos e meses completos, não o número total de dias entre as duas datas. Um LocalDateTime fornece sua data com toLocalDate().

Meça o intervalo entre dois horários com Duration.between(), que recebe dois valores LocalDateTime (ou LocalTime):

LocalDateTime from = LocalDateTime.of(2024, 3, 15, 10, 30);
LocalDateTime to = LocalDateTime.of(2024, 3, 15, 14, 45);
Duration d = Duration.between(from, to);
d.toHours();        // 4
d.toMinutes();      // 255
d.toMinutesPart();  // 15

toMinutes() conta o intervalo total em minutos, incluindo as horas. toMinutesPart() retorna os minutos restantes depois das horas completas, então esse intervalo é de 4 horas e 15 minutos.

challenge icon

Desafio

Fácil

Crie um método chamado calculateDifference que receba quatro argumentos:

  1. Uma String (start) no formato "yyyy-MM-dd HH:mm"
  2. Uma String (end) no formato "yyyy-MM-dd HH:mm"
  3. Uma String (unit) que seja "period" ou "duration"
  4. Uma String (format) que seja "full" ou "simple"

O método deve:

  1. Calcular a diferença entre as datas de início e término
  2. Retornar a diferença no formato especificado

As mensagens retornadas devem ser:

  • Se as datas forem inválidas: retornar "Invalid date format"
  • Se a unidade for inválida: retornar "Invalid unit"
  • Se o formato for inválido: retornar "Invalid format"
  • Para o período com o formato "full": "Years: X, Months: Y, Days: Z"
  • Para o período com o formato "simple": "XyYmZd"
  • Para a duração com o formato "full": "Hours: X, Minutes: Y", em que Y são os minutos restantes após as horas completas
  • Para a duração com o formato "simple": "XhYm"

Experimente você mesmo

import java.util.Scanner;
import java.time.*;
import java.time.format.*;

public class Main {
    public static String calculateDifference(String start, String end, String unit, String format) {
        // Escreva seu código aqui
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String start = scanner.nextLine();
        String end = scanner.nextLine();
        String unit = scanner.nextLine();
        String format = scanner.nextLine();
        
        System.out.println(calculateDifference(start, end, unit, format));
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de Java online