Java 8에서는 java.time 패키지가 추가되어 날짜와 시간을 다루는 API를 제공한다. 이 API는 이전의 java.util.Date 및 java.util.Calendar 클래스보다 사용하기 쉽고, 더 정확하고 기능을 제공하고있다.
1. java.time 제공 클래스
클래스 | 설명 |
LocalDate | 날짜를 표현하는 클래스로, 연, 월, 일 정보만 포함 |
LocalTime | 시간을 표현하는 클래스로, 시, 분, 초, 밀리초 정보만 포함 |
LocalDateTime | 날짜와 시간을 모두 포함하는 클래스로, LocalDate와 LocalTime의 조합 |
Instant | 기계적인 시간의 흐름을 나타내는 클래스로, 에포크부터 경과한 시간 표현 |
Duration | 두 시간 간의 지속 시간을 나타내는 클래스로, 시간 기반의 간격 표현 |
Period | 두 날짜 간의 지속 기간을 나타내는 클래스로, 날짜 기반의 간격 표현 |
DateTimeFormatter | 날짜와 시간을 포맷팅하고 파싱하기 위한 클래스 |
2. 사용 방법
2-1) LocalDate 클래스
import java.time.LocalDate;
public class LocalDateExample {
public static void main(String[] args) {
LocalDate currentDate = LocalDate.now();
System.out.println("Current Date: " + currentDate);
// Current Date: 2023-05-30
LocalDate specificDate = LocalDate.of(2023, 5, 30);
System.out.println("Specific Date: " + specificDate);
// Specific Date: 2023-05-30
LocalDate parsedDate = LocalDate.parse("2023-05-30");
System.out.println("Parsed Date: " + parsedDate);
// Parsed Date: 2023-05-30
}
}
메서드 | 설명 |
of(int year, int month, int dayOfMonth) | 지정된 연, 월, 일로 LocalDate 객체를 생성합니다. |
now() | 현재 시스템 시간으로 LocalDate 객체를 생성합니다. |
getYear() | 연도를 반환합니다. |
getMonth() | 월을 반환합니다. |
getDayOfMonth() | 월의 일을 반환합니다. |
2-2) LocalTime 클래스
import java.time.LocalTime;
public class LocalTimeExample {
public static void main(String[] args) {
LocalTime currentTime = LocalTime.now();
System.out.println("Current Time: " + currentTime);
// Current Time: 10:30:45.123456789
LocalTime specificTime = LocalTime.of(12, 30, 45);
System.out.println("Specific Time: " + specificTime);
// Specific Time: 12:30:45
LocalTime parsedTime = LocalTime.parse("15:45:30");
System.out.println("Parsed Time: " + parsedTime);
// Parsed Time: 15:45:30
}
}
메서드 | 설명 |
of(int hour, int minute) | 지정된 시, 분으로 LocalTime 객체를 생성합니다. |
now() | 현재 시스템 시간으로 LocalTime 객체를 생성합니다. |
getHour() | 시를 반환합니다. |
getMinute() | 분을 반환합니다. |
getSecond() | 초를 반환합니다. |
2-3) LocalDateTime 클래스
시간대에 독립적인 지역적인 날짜와 시간을 표현해야 할 때, LocalDateTime 클래스를 사용한다. 예를 들어 예약된 이벤트의 날짜와 시간, 생일, 회의 시간 등을 나타낼 때 유용하다. 또한, 날짜와 시간을 표현하고 연산하는 데 다양한 메서드와 기능을 제공해 날짜와 시간의 조작, 포맷팅, 파싱 등을 수행할 때 사용할 수 있다.
import java.time.LocalDateTime;
public class LocalDateTimeExample {
public static void main(String[] args) {
LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println("Current Date and Time: " + currentDateTime);
// Current Date and Time: 2023-05-30T10:30:45.123456789
LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 30, 12, 30, 45);
System.out.println("Specific Date and Time: " + specificDateTime);
// Specific Date and Time: 2023-05-30T12:30:45
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-30T15:45:30");
System.out.println("Parsed Date and Time: " + parsedDateTime);
// Parsed Date and Time: 2023-05-30T15:45:30
}
}
- 시간대 : 시간대 정보가 없어 독립적인 날짜와 시간을 나타낸다.
- 기준점 : 날짜와 시간의 기준점은 없으며, 지정된 날짜와 시간만을 나타낸다.
- 정밀도 : 초 이하의 정밀도를 갖지 않고, 시간은 최대 나노초까지 지원된다.
메서드 | 설명 |
of(int year, int month, int dayOfMonth, int hour, int minute) | 지정된 연, 월, 일, 시, 분으로 LocalDateTime 객체를 생성합니다. |
now() | 현재 시스템 시간으로 LocalDateTime 객체를 생성합니다. |
getYear() | 연도를 반환합니다. |
getMonth() | 월을 반환합니다. |
getDayOfMonth() | 월의 일을 반환합니다. |
getHour() | 시를 반환합니다. |
getMinute() | 분을 반환합니다. |
getSecond() | 초를 반환합니다. |
2-4) Instant 클래스
시스템의 현재 시간을 얻어 타임스탬프로 사용해야 할 때, Instant 클래스를 사용한다. Instant는 UTC를 기준으로 한 시간의 흐름을 나타내므로, 타임스탬프를 표현하는 데 적합하다. 또한, 두 시간 사이의 경과 시간을 계산해야 할 때, Instant 클래스와 Duration 클래스와 함께 사용하여 두 Instant 객체 간의 시간 간격을 계산할 수 있다.
import java.time.Instant;
public class InstantExample {
public static void main(String[] args) {
Instant currentInstant = Instant.now();
System.out.println("Current Instant: " + currentInstant);
// Current Instant: 2023-05-30T10:30:45.123456789Z
Instant specificInstant = Instant.ofEpochSecond(1622380800);
System.out.println("Specific Instant: " + specificInstant);
// Specific Instant: 2021-05-30T00:00:00Z
}
}
- 시간대 : UTC(협정 세계시)를 기준으로 한 시간의 흐름을 나타낸다.
- 기준점 : 에포크(1970-01-01 00:00:00 UTC)를 기준으로 한 시간의 경과를 초 단위로 나타낸다.
- 정밀도 : 나노초 단위까지 정밀도를 갖는다.
메서드 | 설명 |
ofEpochSecond(long epochSecond) | 지정된 초로 Instant 객체를 생성합니다. |
now() | 현재 시스템 시간으로 Instant 객체를 생성합니다. |
getEpochSecond() | 에포크 이후의 초를 반환합니다. |
getNano() | 나노초를 반환합니다. |
2-5) Duration 클래스
import java.time.Duration;
import java.time.LocalTime;
public class DurationExample {
public static void main(String[] args) {
LocalTime startTime = LocalTime.of(9, 0);
LocalTime endTime = LocalTime.of(12, 30);
Duration duration = Duration.between(startTime, endTime);
long hours = duration.toHours();
long minutes = duration.toMinutes() % 60;
System.out.println("Duration: " + hours + " hours " + minutes + " minutes");
// Duration: 3 hours 30 minutes
}
}
메서드 | 설명 |
between(Temporal startInclusive, Temporal endExclusive) | 두 시간 사이의 지속 시간을 계산합니다. |
toSeconds() | 지속 시간을 초로 반환합니다. |
toMinutes() | 지속 시간을 분으로 반환합니다. |
toHours() | 지속 시간을 시간으로 반환합니다. |
2-6) Period 클래스
import java.time.LocalDate;
import java.time.Period;
public class PeriodExample {
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2023, 1, 1);
LocalDate endDate = LocalDate.of(2023, 12, 31);
Period period = Period.between(startDate, endDate);
int years = period.getYears();
int months = period.getMonths();
int days = period.getDays();
System.out.println("Period: " + years + " years " + months + " months " + days + " days");
// Period: 0 years 11 months 30 days
}
}
메서드 | 설명 |
between(LocalDate startDateInclusive, LocalDate endDateExclusive) | 두 날짜 사이의 지속 기간을 계산합니다. |
getYears() | 연 수를 반환합니다. |
getMonths() | 월 수를 반환합니다. |
getDays() | 일 수를 반환합니다. |
2-7) DateTimeFormatter 클래스
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterExample {
public static void main(String[] args) {
LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = currentDateTime.format(formatter);
System.out.println("Formatted DateTime: " + formattedDateTime);
// Formatted DateTime: 2023-05-30 10:30:45
String dateTimeString = "2023-05-30 15:45:30";
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println("Parsed Date and Time: " + parsedDateTime);
// Parsed Date and Time: 2023-05-30T15:45:30
// 오전,오후 언어 변경
DateTimeFormatter.ofPattern("a HH시 mm분").withLocale(Locale.forLanguageTag("ko"))
}
}
메서드 | 설명 |
ofPattern(String pattern) | 지정된 패턴으로 DateTimeFormatter 객체를 생성합니다. |
format(TemporalAccessor temporal) | 날짜 및 시간을 지정된 형식으로 포맷팅합니다. |
parse(CharSequence text) | 문자열을 날짜 및 시간으로 파싱합니다. |
withLocale(Locale locale) | 사용할 로케일을 설정합니다. |
반응형
'Java' 카테고리의 다른 글
[Java] CompletableFuture 클래스 사용 방법 (0) | 2023.06.02 |
---|---|
[Java] Optional 클래스 개념 및 사용 방법 (0) | 2023.05.31 |
[Java] 함수형 인터페이스 종류 및 사용 방법 (0) | 2023.05.26 |
[Java] 기본 메서드(Default Methods) 개념 및 사용 방법 (0) | 2023.05.25 |
[Java] 메서드 참조 사용 방법 (1) | 2023.05.24 |