[Kotlin] LocalDateTime to ZonedDateTime

UTC로 된 LocalDateTime인 2022-05-18T06:22:57.616Z2022-05-18T15:22:57.616Z 로 변경한다.

import java.time.*
import java.time.format.DateTimeFormatter

fun LocalDateTime.formatWithUtcToLocal(): String = ZonedDateTime.of(this, ZoneOffset.UTC)
  .withZoneSameInstant(ZoneId.systemDefault())
  .format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))

하지만 현지 시간과 UTC를 서로 변환해야하는 경우가 생길 수 있으니 이렇게 하는게 더 좋을 것 같다.

import java.time.*
import java.time.format.DateTimeFormatter

/**
 * 한국시간을 UTC로 변환
 */
val LocalDateTime.toUtc: LocalDateTime
  get() = ZonedDateTime.of(this, ZoneOffset.ofHours(9)).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime()

/**
 * UTC를 한국시간으로 변환
 */
val LocalDateTime.toKst: LocalDateTime
  get() = ZonedDateTime.of(this, ZoneOffset.UTC).withZoneSameInstant(ZoneOffset.ofHours(9)).toLocalDateTime()

fun LocalDateTime.format(): String = format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))