1. 概要

文字列を日付タイプに変換することは、最も一般的なタスクの1つです。 最新のプログラミング言語とライブラリは、これを実現するためのいくつかの方法を提供します。

このチュートリアルでは、Kotlinを使用して文字列をさまざまな日付タイプに変換するいくつかの効率的な方法について説明します。

2. StringからLocalDateおよびLocalDateTime

最初に、文字列をLocalDateおよびLocalDateTimeタイプに解析する方法を説明します。

2.1. StringLocalDateに解析します

LocalDate クラスには、文字列を解析するための静的なparseメソッドがあります。 最初に表示されるメソッドは、標準の日付形式yyyy-MM-ddに従う必要がある1つのパラメーターを取ります。

fun givenString_whenDefaultFormat_thenLocalDateCreated() {
    val localDate = LocalDate.parse("2022-01-06")
    Assertions.assertThat(localDate).isEqualTo("2022-01-06")
}

2番目の静的メソッドは、2つのパラメーターを受け取るオーバーロードされたメソッドです。 この場合、2番目のパラメーターは String:の日付形式を受け取ります

fun givenString_whenCustomFormat_thenLocalDateCreated() {
    val localDate = LocalDate.parse("01-06-2022", DateTimeFormatter.ofPattern("MM-dd-yyyy"))
    assertThat(localDate).isEqualTo("2022-01-06")
}

2.2. StringLocalDateTimeに解析します

LocalDateTimeクラスは、文字列を解析するための同じ2つの静的メソッドを定義しますが、時間情報を考慮します。 1つのパラメーターのメソッドは、ISO_LOCAL_DATE_TIME形式である必要があるStringsを受け取ります。

fun givenString_whenDefaultFormat_thenLocalDateTimeCreated() {
    val localDateTime = LocalDateTime.parse("2022-01-06T21:30:10")
    assertThat(localDateTime.toString()).isEqualTo("2022-01-06T21:30:10")
}

同様に、 LocalDate で定義されているように、2番目のメソッドは他の日時パターンのフォーマットパラメーターを取ります。

fun givenString_whenCustomFormat_thenLocalDateTimeCreated() {
    val text = "2022-01-06 20:30:45"
    val pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    val localDateTime = LocalDateTime.parse(text, pattern)

    Assertions.assertThat(localDateTime).isEqualTo("2022-01-06T20:30:45")
}

3. Stringからjava.util.Date

古いAPIjava.util.Dateを使用する必要がある場合があります。 幸い、KotlinはJavaとの互換性に優れているため、SimpleDateFormatクラスを使用できます。

次に、Stringsjava.util.DateタイプのDateオブジェクトに変換する方法を見てみましょう。

3.1. Stringjava.util.Dateに解析します

まず、日付パターンに使用するフォーマットオブジェクトを定義する必要があります。 次に、それを使用して String:を解析します

fun givenString_whenParseDate_thenUtilDateIsCreated() {
    val formatter = SimpleDateFormat("yyyy-MM-dd")
    val text = "2022-01-06"
    val date = formatter.parse(text)

    Assertions.assertThat(formatter.format(date)).isEqualTo("2022-01-06")
}

4. タイムゾーンを使用した文字列の解析

4.1. ZonedDateTime を使用して、タイムゾーンでStringを解析します

LocalDateオブジェクトとLocalDateTimeオブジェクトは、タイムゾーンに依存しません。 ただし、特定のタイムゾーンの日付を処理する必要がある場合は、クラス ZonedDateTimeを使用してStrings:を解析できます。

fun givenString_whenParseWithTimeZone_thenZonedDateTimeIsCreated() {
    val text = "2022-01-06 20:30:45 America/Los_Angeles"
    val pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z")
    val zonedDateTime = ZonedDateTime.parse(text, pattern)

    Assertions.assertThat(zonedDateTime.zone).isEqualTo(ZoneId.of("America/Los_Angeles"))
}

4.2. java.util.Dateをタイムゾーンで解析します

同様に、 java.util.Date は、フォーマットオブジェクトを使用してタイムゾーン情報を提供することもできます。

fun givenString_whenParseDateWithTimeZone_thenUtilDateIsCreated() {
    val formatter = SimpleDateFormat("yyyy-MM-dd")
    formatter.timeZone = TimeZone.getTimeZone("America/Los_Angeles");

    val text = "2022-01-06"
    val date = formatter.parse(text)

    assertThat(formatter.format(date)).isEqualTo("2022-01-06")
}

5. 結論

このチュートリアルでは、KotlinでDate-Time APIを使用して、StringオブジェクトをDateタイプに変換する方法を説明しました。 また、 java.util.DateAPIを使用してStringsを解析する方法も確認しました。

いつものように、この記事の完全なコードは、GitHubから入手できます。