티스토리 뷰

개요

  • 백엔드 엔지니어 입장에서 Java에서의 날짜/시간 데이터를 데이터베이스에 저장하고 코드 레벨에서 다루기에 가장 안전한 타입은 UTC+0 오프셋으로 고정된 Instant와 이를 UTC+0으로 변환한 OffsetDateTime이다. 이번 글에서는 이 2개 클래스의 사용법을 간단히 정리하였다.

Instant 현재 순간 생성

// 현재 순간을 UTC+0 기준의 timestamp 정보를 담은 Instant 객체에 저장
val instant: Instant = Instant.now()

Instant to ISO 8601 String

// Instant 객체를 UTC+0 으로 고정된 ISO 8601 문자열로 변환
// 2021-12-24T15:41:49.243777Z
val string: String = instant.toString()

ISO 8601 String to Instant

// ISO 8601 문자열을 Instant 객체로 변환
val instant = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2021-12-24T15:41:49.243777Z"))

Instant to OffsetDateTime

// Instant 객체를 OffsetDateTime 객체로 변환
val offsetDateTime: OffsetDateTime = instant.atOffset(ZoneOffset.UTC)

OffsetDateTime 현재 시간 생성

// 현재 시간을 UTC+0 Offset이 지정된 OffsetDateTime 객체에 저장
val offsetDateTime: OffsetDateTime = OffsetDateTime.now(ZoneOffset.UTC)

OffsetDateTime to Instant

// OffsetDateTime 객체를 Instant 객체로 변환
val instant = offsetDateTime.toInstant()

OffsetDateTime 객체를 5분 단위로 반올림

// OffsetDateTime 객체를 5분 단위로 반올림하고 초 이하는 절삭
val offsetDateTime2 = offsetDateTime
    .withMinute(offsetDateTime.minute - offsetDateTime.minute % 5)
    .withSecond(0)
    .withNano(0)

참고 글

댓글
댓글쓰기 폼