Java 공부 49일차(날짜와 시간이란?)3편

임선구·2025년 4월 7일

몸 비틀며 Java

목록 보기
50/58

오늘의 잔디


오늘의 공부
축제 준비도 해야하고 여러모로 바쁘다 코딩 공부 시간이
방학떄에 비해 많이 줄었다.
그래도 포기하지 않고 조금씩이라도 꾸준히 하다보면
뭔가 달라지겠지?


기간, 시간의 간격 - Duration, Period

시간의 개념은 크게 2가지로 표현할 수 있다.

  • 특정 시점의 시간(시각)
    • 이 프로젝트는 2013년 8월 16일 까지 완료해야해
    • 다음 회의는 11시 30분에 진행한다.
    • 내 생일은 8월 16일이야.
  • 시간의 간격(기간)
    • 앞으로 4년은 더 공부해야 해
    • 이 프로젝트는 3개월 남았어
    • 라면은 3분 동안 끓어야 해

Period , Duration 은 시간의 간격(기간)을 표현하는데 사용된다.
시간의 간격은 영어로 amount of time(시간의 양)으로 불린다.

Period
두 날짜 사이의 간격을 년, 월, 일 단위로 나타낸다.

  • 이 프로젝트는 3개월 정도 걸릴 것 같아
  • 기념일이 183일 남았어
  • 프로젝트 시작일과 종료일 사이의 간격: 프로젝트 기간

Duration
두 시간 사이의 간격을 시, 분, 초(나노초) 단위로 나타낸다.

  • 라면을 끓이는 시간은 3분이야
  • 영화 상영 시간은 2시간 30분이야
  • 서울에서 부산까지는 4시간이 걸려

Period

두 날짜 사이의 간격을 년, 월, 일 단위로 나타낸다.

public class Period {
 private final int years;
 private final int months;
 private final int days;
}
package time;
import java.time.LocalDate;
import java.time.Period;
public class PeriodMain {
 public static void main(String[] args) {
 //생성
 Period period = Period.ofDays(10);
 System.out.println("period = " + period);
 //계산에 사용
 LocalDate currentDate = LocalDate.of(2030, 1, 1);
 LocalDate plusDate = currentDate.plus(period);
 System.out.println("현재 날짜: " + currentDate);
 System.out.println("더한 날짜: " + plusDate);
 //기간 차이
 LocalDate startDate = LocalDate.of(2023, 1, 1); LocalDate endDate = LocalDate.of(2023, 4, 2);
 Period between = Period.between(startDate, endDate);
 System.out.println("기간: " + between.getMonths() + "개월 " +
between.getDays() + "일");
 }
}

실행 결과

period = P10D
현재 날짜: 2030-01-01
더한 날짜: 2030-01-11
기간: 3개월 1일

생성

  • of() : 특정 기간을 지정해서 Period 를 생성한다.
    • of(년, 월, 일)
    • ofDays()
    • ofMonths()
    • ofYears()

계산에 사용

  • 2030년 1월 1일에 10일을 더하면 2030년 1월 11일이 된다. 라고 표현할 때 특정 날짜에 10일이라는 기간을 더
    할 수 있다.

기간 차이

  • 2023년 1월 1일과 2023년 4월 2일간의 차이는 3개월 1일이다. 라고 표현할 때 특정 날짜의 차이를 구하면 기간
    이 된다.
  • Period.between(startDate, endDate) 와 같이 특정 날짜의 차이를 구하면 Period 가 반환된다.

Duration

두 시간 사이의 간격을 시, 분, 초(나노초) 단위로 나타낸다.

public class Duration {
 private final long seconds; private final int nanos;
}

내부에서 초를 기반으로 시, 분, 초를 계산해서 사용한다.

  • 1분 = 60초
  • 1시간 = 3600초
package time;
import java.time.Duration;
import java.time.LocalTime;
public class DurationMain {
 public static void main(String[] args) {
 //생성
 Duration duration = Duration.ofMinutes(30);
 System.out.println("duration = " + duration);
 LocalTime lt = LocalTime.of(1, 0);
 System.out.println("기준 시간 = " + lt);
 //계산에 사용
 LocalTime plusTime = lt.plus(duration);
 System.out.println("더한 시간 = " + plusTime);
 //시간 차이
 LocalTime start = LocalTime.of(9, 0);
 LocalTime end = LocalTime.of(10, 0);
 Duration between = Duration.between(start, end);
 System.out.println("차이: " + between.getSeconds() + "초");
 System.out.println("근무 시간: " + between.toHours() + "시간 " +
between.toMinutesPart() + "분");
 }
}

실행 결과

duration = PT30M
기준 시간 = 01:00더한 시간 = 01:30
차이: 3600초
근무 시간: 1시간 0분

생성

  • of() : 특정 시간을 지정해서 Duration 를 생성한다.
    • of(지정)
    • ofSeconds()
    • ofMinutes()
    • ofHours()

계산에 사용

  • 1:00에 30분을 더하면 1:30이 된다. 라고 표현할 때 특정 시간에 30분이라는 시간(시간의 간격)을 더할 수 있다.

시간 차이

  • 9시와 10시의 차이는 1시간이라고 표현할 때 시간의 차이를 구할 수 있다.
  • Duration.between(start, end) 와 같이 특정 시간의 차이를 구하면 Duration 이 반환된다.
profile
끝까지 가면 내가 다 이겨

0개의 댓글