[Java]LocalDateTime, OffsetDateTime, ZonedDateTime, Instant
- study
- 2022. 3. 16. 21:41
타임스탬프를 RFC 3339의 형태로 보내 달라는 요구사항을 받았다. 그리고 어떤 값은 밀리세컨드 단위까지, 어떤 값은 세컨드 값 까지만 전달해 달라는 요구사항을 받았다. 어카지?
ISO 8601
- 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준
- https://ko.wikipedia.org/wiki/ISO_8601
RFC 3339
- ISO 8601을 인터넷 프로토콜로 어떻게 다룰지 규정한 RFC
- RFC 3339에서는 'T'의 생략을 허용하지 않고, 날짜와 시간 사이의 공백을 허용한다.
UTC 시간대를 기준으로 여러 포맷이 사용 될 수 있지만 대부분 아래와 같은 형태 일 것이다.
2020–08–28T09:20:26.187+09:00
LocalDateTime(LocalDate, LocalTime)
- 현재 로컬의 시간 정보
//서울
System.out.println(LocalDateTime.now());
2022-03-16T21:26:25.495803
//몬트리올
System.out.println(LocalDateTime.now());
2022-03-16T08:23:38.556553
- 컴퓨터의 시간을 그대로 나타내주고 있음
OffestDateTime
- 타임존에 대한 정보를 가지고 있다...!
System.out.println(OffsetDateTime.now());
2022-03-16T21:29:11.227296+09:00
ZonedDateTime
- OffestDateTime에서 ZoneRegion에 대한 정보까지 포함
- +09:00 시간대에 서울특별시-대한민국 말고도, 중국 칭다오나 일본 후쿠오카 같은 지역도 포함된다.
System.out.println(ZonedDateTime.now());
2022-03-16T21:39:36.821077+09:00[Asia/Seoul]
Instant
- 유닉스 시간 : POSIX 시간이나 Eporch 시간이라 부르기도 한다.
- 1970년 1월 1일 00:00:00 협정 세계시 (UTC)로 부터의 경과 시간을 초로 환산하여 표현한 것 이다.
- 자바의 System.currentTimeMillis() 현재의 유닉스 시간을 밀리초로 반환한다.
System.out.println(Instant.now());
System.out.println(Instant.ofEpochMilli(System.currentTimeMillis()));
//2022-03-20T16:32:04.204752Z
//2022-03-20T16:32:04.204Z
//현재 한국은 2022-03-21 01:32
- now()로 하면 나노초 단위까지 계산 밀리초 단위 까지 계산하려면 ofEpochMili()를 사용한다.
초 단위 까지만 표기하기
System.out.println(OffsetDateTime.now().withNano(0));
//2022-03-21T01:32:04+09:00
- withNano(0)시 밀리세컨드 또한 사라진다.
- OffsetDateTime은 밀리초단위는 컨트롤을 못한다...;
밀리 세컨드 단위 까지 표현하기
System.out.println(OffsetDateTime.ofInstant(Instant.ofEpochMilli(Instant.now().toEpochMilli()), ZoneId.systemDefault()));
System.out.println(OffsetDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault()));
//2022-03-21T01:32:04.204+09:00
//2022-03-21T01:32:04.204+09:00
- Date도 시간을 currentTimeMillis로 가지고 있다.
public Date() {
this(System.currentTimeMillis());
}
기존 LocalDateTime을 OffsetDateTime으로 변경하기
System.out.println(localdateTime);
System.out.println(localdateTime.atOffset(OffsetDateTime.now().getOffset()));
//2022-03-21T01:44:52.083033
//2022-03-21T01:44:52.083033+09:00
- atOffset을 활용해서 offset을 붙혀 줄 수 있다.
'study' 카테고리의 다른 글
서킷브레이커 (0) | 2022.04.13 |
---|---|
Spring AOP - Transactional, Async (0) | 2022.03.25 |
[Java]컬렉션(Collections) 정리 (0) | 2021.12.02 |
[Spring]프로토타입과 스코프 (0) | 2021.12.02 |
[DB]트랜잭션 정리 (0) | 2021.12.02 |