🍊 Date, Time 예제 코드
1. Instant, 지금 이 순간을 기계 시간으로 표현하는 방법
시간을 재거나 메서드 실행 시간을 비교할 때 사용한다.
사용자 친화적으로 출력하고 그리니치 평균 시간(GMT)을 기준으로 한다.
public static void main(String[] args) {
Instant instant = Instant.now();
System.out.println(instant);
}
// 2022-02-22T13:23:41.635622500Z
기준을 변경하고 싶다면 Zone을 지정해야 한다.
public static void main(String[] args) {
Instant instant = Instant.now();
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
instant.atZone(zone);
System.out.println(instant);
}
// Asia/Seoul
// 2022-02-22T13:27:19.845460800Z
2. LocalDateTime, 인류용 일시를 표현하는 방법
Local 이란 말에서 알 수 있듯 현재 시스템의 Zone 정보를 참고해서 로컬 시간을 가져온다.
이말이도르 미국에 있는 서버에서 코드가 돌아간다면 미국 Zone을 참고해 로컬 시간을 가져오니 주의해야 한다.
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 2022-02-22T22:32:32.162044800
of를 사용하면 특정 시간을 만들 수도 있다.
LocalDateTime christmas = LocalDateTime.of(2022, Month.DECEMBER, 25, 0, 0);
System.out.println(christmas);
// 2022-12-25T00:00
3. ZonedDateTime, 특정 Zone의 시간을 보고싶은 경우
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
System.out.println(zonedDateTime);
// 2022-02-22T22:41:44.323580400+09:00[Asia/Seoul]
4. Period / Duration, 기간을 표현하는 방법
Period는 두 날짜 사이의 간격을 년, 월, 일 ... 단위로 표현한다.
LocalDate today = LocalDate.now();
LocalDate christmas = LocalDate.of(2022, Month.DECEMBER, 25);
Period period = Period.between(today, christmas);
System.out.println(period.getMonths() + "개월 " + period.getDays() + "일");
// 10개월 3일
총 일수를 계산하고 싶다면 ChronoUnit.DAYS.between을 사용하면 된다.
long days = ChronoUnit.DAYS.between(today, christmas);
System.out.println(days);
// 306
Duration은 두 시간 사이의 간격을 초, 나노 단위로 표현한다.
Instant now = Instant.now();
Instant plus = now.plus(10, ChronoUnit.SECONDS);
Duration duration = Duration.between(now, plus);
System.out.println(duration.getSeconds());
// 10
5. 파싱 또는 포매팅
LocalDateTime을 그냥 출력해도 읽기에 나쁘진 않다.
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 2022-02-22T23:21:45.650759400
하지만 원하는 형태로 날짜, 시간으로 포맷팅이 필요할 때가 있으니 DateTimeFormatter를 제공한다.
Java에서 미리 정의한 포맷이 존재하니 참고해서 사용하면 좋을듯 하다.
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(now.format(yyyyMMdd));
// 2022/02/22
문자열을 LocalDate로 변환하는 파싱 기능도 제공한다.
DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate parse = LocalDate.parse("12/25/2022", yyyyMMdd);
System.out.println(parse);
// 2022-12-25
'Java > Java 8' 카테고리의 다른 글
[Java8] Chapter 6-2. Executors (0) | 2022.03.01 |
---|---|
[Java8] Chapter 6-1. Java Concurrent 프로그래밍 (0) | 2022.03.01 |
[Java8] Chapter 5-1. Date와 Time (1) (0) | 2022.02.22 |
[Java8] Chapter 4-2. Optional API 실습 (2) (0) | 2022.02.21 |
[Java8] Chapter 4-1. Optional (1) (0) | 2022.02.20 |