개발 공부/JAVA

JAVA Instant 와 LocalTime, LocalDateTime(+ZonedDateTime, OffsetDateTime)

solutionMan 2023. 6. 10. 11:29
반응형

 

정리이유

몽고 DB TimeStamp를 다루다 Java Time Instant를 사용할 일이 생겼음

기존에 사용하던 LocalDateTime과는 무엇이 다른지 

몰랐었고 그것을 알아보는 김에 LocalDateTime에대해서도 좀 더 구체적으로 파악하기위해 이 포스팅을 하게됢

1. Instant

Instant는 UTC 시간대를 기준으로 타임라인의 특정 시점을 나타내는 Java 클래스입니다.
에포크(1970년 1월 1일, 00:00:00 UTC) 이후 나노초 단위로 측정된 고정밀 시간 표현을 제공

 

Instant는 시간 기반 계산을 수행하거나, 경과 시간을 측정하거나,
표준 시간대 또는 로컬 표현과 독립적인 타임스탬프로 작업해야 하는 시나리오에서 특히 유용합니다.
서버 응용 프로그램, 분산 시스템 및 시간에 민감한 데이터를 처리할 때 일반적으로 사용

 

요약하면 Instant는 시간 계산, 기간 측정 또는 시간대와 무관한 타임스탬프 작업과 관련된 상황에서 유용합니다.
고정밀 및 UTC 기반 표현으로 인해 시간에 민감한 다양한 응용 프로그램에 적합

 

 

1. LocalDateTime과 LocalTime의 차이점

1)LocalDateTime은 표준 시간대 정보가 없는 날짜 및 시간을 나타냅니다

LocalDate(날짜 표시)와 LocalTime(시간 표시)의 조합

 

 

2)LocalTime은 날짜나 표준 시간대 정보가 없는 시간을 나타냅니다. 시간, 분, 초 및 나노초와 같은 시간 구성 요소만저장

 

결론: Java에서 날짜 및 시간으로 작업할 때 LocalDateTime과 LocalTime의 차이점을 이해하는 것이 중요합니다.

LocalDateTime을 사용하면 날짜 및 시간 구성 요소를 모두 조작할 수 있으며 LocalTime은 시간 측면에만 집중저장

 


2.LocalDateTime 메소드

 

of()

- 지정된 날짜 및 시간 구성요소로 LocalDateTime 객체를 생성합니다.

LocalDateTime meetingDateTime = LocalDateTime.of(2023, 12, 25, 10, 30);

 

now()

- 시스템 시계에서 현재 날짜와 시간을 가져옵니다.

LocalDateTime currentDateTime = LocalDateTime.now();

 

getYear(), getMonthValue(), getDayOfMonth(), getHour(), getMinute(), getSecond()

- 개별 날짜 및 시간 구성 요소를 검색합니다.

int year = meetingDateTime.getYear();
int month = meetingDateTime.getMonthValue();
int day = meetingDateTime.getDayOfMonth();
int hour = meetingDateTime.getHour();
int minute = meetingDateTime.getMinute();
int second = meetingDateTime.getSecond();

 

plusYears(), plusMonths(), plusDays(), plusHours(), plusMinutes(), plusSeconds()

- 지정된 금액을 날짜 및 시간 구성 요소에 추가합니다.

LocalDateTime futureDateTime = meetingDateTime.plusDays(7);

 

minusYears(), minusMonths(), minusDays(), minusHours(), minusMinutes(), minusSeconds()

- 날짜 및 시간 구성요소에서 지정된 금액을 뺍니다.

LocalDateTime pastDateTime = meetingDateTime.minusHours(2);

 

isEqual()

- 두 LocalDateTime 객체가 동일한 날짜와 시간을 나타내는지 확인합니다.

boolean isSameDateTime = meetingDateTime.isEqual(currentDateTime);

 

isBefore() 및 isAfter()

- 두 개의 LocalDateTime 객체를 비교하여 시간순으로 다른 객체의 이전 또는 이후인지 확인합니다.

boolean isFutureDateTime = futureDateTime.isAfter(currentDateTime);
boolean isPastDateTime = pastDateTime.isBefore(currentDateTime);

 

 

 

 

ZonedDateTime, OffsetDateTime 

 

ZonedDateTime

ZonedDateTime: ZonedDateTime은 시간대 정보와 함께 날짜 및 시간을 나타내는 클래스입니다. 시간대를 처리하는 기능을 추가하여 LocalDateTime을 확장합니다. 이 클래스는 시간대를 변환하고 시간대 관련 계산을 수행하는 메서드를 제공하므로 다른 시간대의 날짜 및 시간 값을 처리할 때 유용

 

예시)

뉴욕 시간대로 2023년 12월 25일 오전 10시 30분에 예정된 비즈니스 미팅과 같은 특정 이벤트를 나타내려고 한다고 가정합니다. 다음과 같이 ZonedDateTime 개체

 

ZonedDateTime meetingDateTime = ZonedDateTime.of(2023, 12, 25, 10, 30, 0, 0, ZoneId.of("America/New_York"));

 

OffsetDateTime

OffsetDateTime은 날짜 및 시간을 나타내는 ZonedDateTime과 유사하지만 UTC(Coordinated Universal Time)로부터의 추가 오프셋이 있습니다. 날짜, 시간 및 현지 시간과 UTC 간의 차이를 나타내는 오프셋을 저장합니다.

 

예시)
UTC에서 +02:00의 고정 오프셋이 있는 시간대에서 2023년 12월 25일 오전 10시 30분에 예정된 비즈니스 미팅과 같은 특정 이벤트를 나타내려고 한다고 가정합니다. 다음과 같이 OffsetDateTime 객체를 생성할 수 있습니다.

 

OffsetDateTime meetingDateTime = OffsetDateTime.of(2023, 12, 25, 10, 30, 0, 0, ZoneOffset.ofHours(2));

 

ZonedDateTime, OffsetDateTime  <->LocalDateTime

1)LocalDateTime to ZonedDateTime,offsetDateTime

LocalDateTime localDateTime = LocalDateTime.of(2023, 12, 25, 10, 30);

ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);


LocalDateTime localDateTime = LocalDateTime.of(2023, 12, 25, 10, 30);

ZoneOffset zoneOffset = ZoneOffset.ofHours(2);
offsetDateTime offsetDateTime = localDateTime.atOffset(zoneOffset);



2)ZonedDateTime,offsetDateTime to LocalDateTime 

ZonedDateTime zonedDateTime = ZonedDateTime.now();

LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();


OffsetDateTime offsetDateTime = OffsetDateTime.now();

LocalDateTime localDateTime = offsetDateTime.toLocalDateTime();

 

참고)

 

 

Java 8 LocalDateTime vs Instant 어떤 상황에서 쓰는게 적합한가?

Java 8 LocalDateTime vs Instant 어떤 상황에서 쓰는게 적합한가? 들어가기 전에 본 글은 세션 공유용 자료이며 LocalDateTime, Instant 의 개념에 관한 짧은 글이 아니므로 양해 부탁드립니다. 포스팅 계기 최

sujl95.tistory.com

 

 

 

반응형