Kotlin logo

The Kotlin Blog

Kotlin Programming Language by JetBrains

Libraries

kotlinx-datetime 0.2.0이 출시되었습니다

오늘은 날짜 및 시간 작업을 위한 새로운 버전의 멀티플랫폼 라이브러리로, Kotlin 1.5.0과 함께 출시된 kotlinx-datetime 0.2.0을 살펴보겠습니다. 지난 여름에 첫 번째 버전의 라이브러리를 공개했으며, 이제 안정화 릴리스로 가는 다음 단계에 왔습니다.

kotlinx-datetime은 Kotlin 1.4 온라인 이벤트에서 소개되었습니다. Ilya Gorbunov의 이 강연에서 이 라이브러리의 설계 원칙과 기능에 대해 자세히 알아볼 수 있습니다. kotlinx-datetime에 대해 궁금한 점이 있으면 5월 25일 오후 11시(한국표준시 기준)에 열리는 Kotlin 1.5 온라인 이벤트에 참여하여 Kotlin 팀에게 질문해 주세요.

Kotlin 온라인 행사 등록하기

버전 0.2.0에서는 다양한 개선이 이루어졌습니다.

  • kotlinx.serialization 지원
  • DateTimePeriod 구성 요소의 정규화
  • UTC 오프셋이 있는 문자열에서 Instant를 구문 분석하는 기능

사용해보세요! – 단, Kotlin 버전 1.5.0이 설치되어 있어야 합니다. 기능에 대해 자세히 살펴보겠습니다!

kotlinx-datetime 0.2.0은 아직 실험적 단계입니다. API는 언제든지 변경될 수 있습니다.

kotlinx.serialization 지원

kotlinx-datetimeInstant, LocalDateTimeZone과 같이 날짜 및 시간을 나타내기 위한 자체 유형을 제공합니다. 버전 0.2.0에서는 이러한 모든 유형이 kotlinx.serialization 라이브러리에서 지원되므로 이제 직렬화가 가능합니다. 직렬 변환기 세트는 kotlinx.datetime.serializers 패키지에 포함되어 라이브러리에 번들로 제공됩니다.

이제 대부분의 유형에 디폴트 직렬 변환기가 있습니다. 직렬화가 가능한 유형은 Instant, LocalDate, LocalDateTime, DateTimePeriod, DatePeriod, TimeZoneZoneOffset 등입니다. 명시적인 어노테이션 없이 직렬화 가능한 클래스에서 이러한 유형을 프로퍼티로 사용할 수 있습니다.

디폴트 직렬 변환기는 유형의 ISO 8601 문자열 표현을 기반으로 하며 toString()/parse()를 사용하여 값을 직렬화 및 역직렬화합니다.

일부 유형의 경우, 특정 형식의 디폴트 직렬 변환기보다 더 효율적일 수 있는 다른 직렬화 전략을 사용할 수 있도록 대체 직렬 변환기가 있습니다. 예를 들어, LocalDateLocalDateComponentSerializer를 사용하여 구성 요소 단위로 직렬화할 수 있습니다. 직렬 변환기를 명시적으로 선택하려면 일반 @Serializable(with = ...) 어노테이션을 사용하세요. 컨텍스트 직렬 변환기를 사용하여 이 선택을 런타임으로 연기할 수도 있습니다.

직렬 변환기가 없는 유형도 있습니다. DayOfWeekMonthkotlinx.serialization에서 일반 열거형으로 지원됩니다.

kotlinx.serializationkotlinx-datetime의 선택적 종속 요소라는 점을 염두에 두세요. 프로젝트에서 직렬화 기능을 사용하려면 kotlinx-datetime 옆에 kotlinx-serialization-core 종속성을 추가하세요.

DateTimePeriod 구성 요소의 정규화

DateTimePeriod 클래스는 년, 월, 일, 시, 분, 초 및 나노초와 같은 다양한 시간 단위 유형의 조합으로 두 시점 사이의 기간을 나타냅니다. 이러한 각 시간 단위 유형에 대해 클래스에는 생성자 매개변수에서 값을 받는 해당 프로퍼티가 있습니다(예: DateTimePeriod(months = 14, minutes = 90)).

이전에는 구성 요소가 독립적이었으며 생성자에 전달된 값만 보유했습니다. 그러나 이로 인해 다른 구성 요소 값을 가진 두 객체가 동일하지 않으면서도 동일한 ISO 표현을 갖는 경우가 생길 수 있습니다. 이러한 값을 직렬화한 다음 역직렬화하면 원래 값과 다른 값이 생성될 수 있습니다.

이 버전에서는 DateTimePeriod의 내부 표현을 변경하여 구성 요소 정규화 단계를 생성자에 추가했습니다. 이제 구성 요소가 나노초, 일, 월의 조합으로 내부적으로 정규화되어 초기 문제를 해결하고 구성 요소 프로퍼티 getter에서 반환된 값이 크더라도 읽기가 쉬워졌습니다.

UTC 오프셋이 있는 문자열에서 Instant 구문 분석

Instant 클래스는 시점을 나타냅니다. 이 라이브러리를 사용하면 ISO 8601 표준을 따르는 날짜 및 시간 표현이 있는 문자열에서 구문을 분석할 수 있습니다.

0.2.0 이전에는 2021-01-02T03:02:01Z와 같이 끝에 Z 시간대 지정자가 있는 형식만 허용되었습니다. 즉, 시간이 UTC+0 오프셋으로 지정되었습니다. 이제부터는 0이 아닌 UTC 오프셋도 지원합니다.

한번 사용해 보세요

kotlinx-datetime 0.2.0은 Maven Central에서 이용할 수 있습니다. 프로젝트에 사용하려면:

  • Maven Central을 저장소로 설정했는지 확인합니다.
  • kotlinx-datetime을 종속 요소로 추가합니다(멀티플랫폼 프로젝트에서 작업하는 경우 소스 세트를 지정하는 것을 잊지 마세요).

라이브러리 사용 방법에 대한 자세한 지침은 README를 참조하세요.

의견을 공유해 주세요

이 라이브러리는 실험적 단계이며 API가 계속 변경될 수 있습니다. 안정적인 릴리스로 가기 위해 노력하고 있으며, 여러분의 의견이 꼭 필요합니다.

kotlinx-datetime 0.2.0을 사용해보고 여러분의 경험을 공유해주세요! 문제가 발생하면 프로젝트의 이슈 트래커에 보고해 주시고 궁금한 점이 있으면 Slack에 질문을 남겨 주세요(여기에서 초대를 받을 수 있습니다).

이 게시물은 Anastasia Shadrina가 작성한 kotlinx-datetime 0.2.0 Is Out을 번역한 글입니다.

Discover more