Menu
CoddyTech

Period y Duration

Parte de la sección Lógica y Flujo del Journey de Java de Coddy. Lección 57 de 59.

Period representa una cantidad de tiempo basada en fechas (años, meses, días), mientras que Duration representa una cantidad basada en tiempo (horas, minutos, segundos).

Crea un período:

Period period = Period.of(1, 2, 15);
// 1 año, 2 meses, 15 días

Crea una duración:

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

Después de ejecutar el código anterior, period contiene:

P1Y2M15D  // formato ISO-8601

Mide la diferencia entre dos fechas con Period.between(). Recibe dos valores LocalDate y divide la diferencia en años, meses y días:

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() devuelve solo los días restantes después de contar los años y meses completos, no el número total de días entre las dos fechas. Un LocalDateTime te proporciona su fecha con toLocalDate().

Mide el intervalo entre dos horas con Duration.between(), que acepta dos valores de LocalDateTime (o 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() cuenta todo el intervalo en minutos, incluidas las horas. toMinutesPart() da los minutos restantes después de contar las horas completas, por lo que este intervalo es de 4 horas y 15 minutos.

challenge icon

Desafío

Fácil

Crea un método llamado calculateDifference que tome cuatro argumentos:

  1. Una cadena (start) con el formato "yyyy-MM-dd HH:mm"
  2. Una cadena (end) con el formato "yyyy-MM-dd HH:mm"
  3. Una cadena (unit) que sea "period" o "duration"
  4. Una cadena (format) que sea "full" o "simple"

El método debe:

  1. Calcular la diferencia entre las fechas de inicio y fin
  2. Devolver la diferencia con el formato especificado

Los mensajes devueltos deben ser:

  • Si las fechas no son válidas: devolver "Invalid date format"
  • Si la unidad no es válida: devolver "Invalid unit"
  • Si el formato no es válido: devolver "Invalid format"
  • Para el período con el formato "full": "Years: X, Months: Y, Days: Z"
  • Para el período con el formato "simple": "XyYmZd"
  • Para la duración con el formato "full": "Hours: X, Minutes: Y", donde Y son los minutos restantes después de las horas completas
  • Para la duración con el formato "simple": "XhYm"

Pruébalo tú mismo

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) {
        // Escribe tu código aquí
    }
    
    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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Java online