Menu
CoddyTech

Period와 Duration

Coddy Java 여정의 논리와 흐름 섹션에 포함된 레슨. 59개 중 57번째.

Period는 날짜 기반의 시간량(년, 월, 일)을 나타내고, Duration은 시간 기반의 시간량(시간, 분, 초)을 나타냅니다.

기간 생성:

Period period = Period.of(1, 2, 15);
// 1년, 2개월, 15일

Duration 만들기:

Duration duration = Duration.ofHours(2);
// 2시간
Duration minutes = Duration.ofMinutes(90);
// 90분

위 코드를 실행한 후, period에는 다음이 들어 있습니다:

P1Y2M15D  // ISO-8601 형식

Period.between()을 사용해 두 날짜 사이의 간격을 측정하세요. 두 개의 LocalDate 값을 받아 간격을 년, 월, 일로 나눕니다:

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()는 두 날짜 사이의 총 일수가 아니라, 온전한 년과 월을 계산한 뒤 남은 일수만 반환합니다. LocalDateTime에서 날짜를 가져오려면 toLocalDate()를 사용하세요.

Duration.between()를 사용해 두 시간 사이의 간격을 측정합니다. 이 메서드는 두 개의 LocalDateTime(또는 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()는 시간까지 포함한 전체 간격을 분 단위로 계산합니다. toMinutesPart()는 전체 시간 이후에 남은 분을 반환하므로, 이 간격은 4시간 15분입니다.

challenge icon

챌린지

쉬움

calculateDifference라는 이름의 메서드를 만들고 다음 네 개의 인수를 받도록 하세요:

  1. "yyyy-MM-dd HH:mm" 형식의 String (start)
  2. "yyyy-MM-dd HH:mm" 형식의 String (end)
  3. "period" 또는 "duration"인 String (unit)
  4. "full" 또는 "simple"인 String (format)

이 메서드는 다음을 수행해야 합니다:

  1. 시작 날짜와 종료 날짜의 차이를 계산합니다
  2. 지정된 형식으로 차이를 반환합니다

반환할 메시지:

  • 날짜가 유효하지 않으면 "Invalid date format"을 반환합니다
  • 단위가 유효하지 않으면 "Invalid unit"을 반환합니다
  • 형식이 유효하지 않으면 "Invalid format"을 반환합니다
  • "full" 형식의 기간인 경우: "Years: X, Months: Y, Days: Z"
  • "simple" 형식의 기간인 경우: "XyYmZd"
  • "full" 형식의 지속 시간인 경우: "Hours: X, Minutes: Y". 여기서 Y는 전체 시간으로 환산한 뒤 남은 분입니다
  • "simple" 형식의 지속 시간인 경우: "XhYm"

직접 해보기

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) {
        // 여기에 코드를 작성하세요
    }
    
    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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 Java 컴파일러