반응형
기본적으로 자바에서는 날짜와 시간을 다루기 위해서 java.util.Date와 java.util.Calendar 클래스를 사용했지만, 사용에 불편함이 많아 JDK8 이후부터는 java.time 패키지의 클래스로 많은 부분이 대체되었다.
[ 날짜 및 시간 구하기 ]
LocalDate, LocalTime, LocalDateTime
가장 기본이 되는 클래스들로 각각 날짜, 시간, 날짜와 시간을 다루는 클래스이다.
new 키워드를 통해 직접적인 인스턴스 생성이 불가능하고 static 메서드를 이용하는 방식을 사용한다.
- now() : 현재 날짜, 시간에 기반하여 인스턴스 생성
- of() : 인자로 전달되는 특정 날짜, 시간에 기반한 인스턴스 생성
- atTime() : 특정 시간정보에 기반해 LocalDateTime 인스턴스 생성
예제를 한 번 만들어보도록 하자.
public class DateTimeTest1 {
public static void main(String[] args) {
LocalDate d1 = LocalDate.now();
LocalDate d2 = LocalDate.of(2019, 10, 10);
LocalTime t1 = LocalTime.now();
LocalTime t2 = LocalTime.of(7, 20, 20);
System.out.printf("LocalDate.now() : %s\n", d1);
System.out.printf("LocalDate.of(2019,10,10) : %s\n", d2);
System.out.printf("LocalTime.now() : %s\n", t1);
System.out.printf("LocalTime.of(7,20,20) : %s\n", t2);
LocalDateTime dt1 = LocalDate.now().atTime(LocalTime.MIDNIGHT);
LocalDateTime dt2 = LocalDate.now().atTime(LocalTime.MAX);
System.out.printf("LocalDate.now().atTime(LocalTime.MIDNIGHT) : %s\n", dt1);
System.out.printf("LocalDate.now().atTime(LocalTime.MAX) : %s\n", dt2);
}
}
- 별도의 형식을 지정하지 않았기 때문에 해당 객체에서 제공하는 기본 형식으로 출력 된다.
- now()는 현재 날짜 및 시간, of()는 특정 날짜 및 시간 객체 생성
- LocalDate에 Time을 추가하려면 atTime()를 사용하며 LocalDateTime이 리턴됨
- LocalTime.MIDNIGHT, MAX, MIN, NOON 등 사용 가능.
[ 형식 지정하기 ]
java.time.format 패키지의 클래스들이 사용되며 대표적인 것은 DateTimeFormatter 클래스이다.
- ofLocalizedDate() : 현재 지역(국가)에 따른 기본 표기 형식으로 출력
- ofPattern() : 인자로 특정 포맷을 지정
[ 날짜와 시간차이 계산하기 ]
보통 날짜와 시간이 많이 사용되는 부분은 월별로 데이터를 관리하거나 특정 기간의 데이터를 조회하거나 하는 등의 작업이다.
- Period : 날짜 사이의 간격을 년/월/일 단위로 나타낸다.
- Duration : 시간 사이의 간격을 나노초 단위로 나타낸다.
예제를 한 번 만들어보도록 하자.
public class DateTimeTest2 {
public static void main(String[] args) {
LocalDateTime dt1 = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
System.out.println(dtf.format(dt1));
System.out.println(dt1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(dt1.plusDays(2));
System.out.println(LocalTime.now().minusHours(3));
System.out.println(Duration.ofMinutes(10).getSeconds());
LocalTime start = LocalTime.of(11, 40, 50);
LocalTime end = LocalTime.of(11, 42, 50);
Duration duration = Duration.between(start, end);
System.out.println("Seconds: " + duration.getSeconds());
LocalDate startDate = LocalDate.of(1950, 9, 1);
LocalDate endDate = LocalDate.of(2010, 9, 2);
Period period = Period.between(startDate, endDate);
System.out.println("Years: " + period.getYears());
System.out.println("Months: " + period.getMonths());
System.out.println("Days: " + period.getDays());
}
}
- Duration을 통해 시간 차이를 초단위로 계산
- Period를 이용해 연/월/일 차이를 계산
반응형
'Programming > Java' 카테고리의 다른 글
[Java] 참조형식과 호출되는 메서드의 관계 (0) | 2020.07.04 |
---|---|
[Java] Log4j에 대해 알아보자 (0) | 2019.11.11 |
[JAVA] TCP 통신 소켓 프로그래밍(양방향 통신) (0) | 2019.08.02 |
[JAVA] TCP 통신 소켓 프로그래밍(단방향 통신) (0) | 2019.08.02 |
[JAVA] public class & class 차이 (5) | 2019.04.02 |