Android
 Computer >> コンピューター >  >> プログラミング >> Android

KotlinでAndroidアプリのISO 8601形式の日時文字列をDateオブジェクトに変換する方法

この記事では、Kotlinを使ってAndroidアプリ内でISO 8601形式の日時文字列を日付・時刻(Date)オブジェクトに変換する方法を、実際のコード例とともに解説します。

ISO 8601は「2020-07-05T09:27:37Z」のような国際標準の日時表記フォーマットで、APIレスポンスなどでよく使われます。これをAndroidアプリ内で扱えるDateオブジェクトに変換する手順を見ていきましょう。

手順1:新規プロジェクトを作成する

Android Studioを開き、「File」→「New Project」を選択して、必要な情報を入力し、新しいプロジェクトを作成します。

手順2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="50dp"
    android:text="Tutorials Point"
    android:textAlignment="center"
    android:textColor="@android:color/holo_green_dark"
    android:textSize="32sp"
    android:textStyle="bold" />
<TextView
    android:id="@+id/textView"
    android:textAlignment="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:textColor="@android:color/holo_red_dark"
    android:textSize="24sp"
    android:textStyle="bold" />
</RelativeLayout>

このレイアウトでは、画面中央に結果を表示するためのTextViewを配置しています。

手順3:MainActivity.ktにコードを追加する

src/MainActivity.kt に以下のコードを記述します。

import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import java.text.SimpleDateFormat
import java.util.*
class MainActivity : AppCompatActivity() {
    lateinit var textView: TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        textView = findViewById(R.id.textView)
        val dtStart = "2020-07-05T09:27:37Z"
        val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
        val date: Date = format.parse(dtStart)
        textView.text = "ISO 8601 date/time: $date"
    }
}

ここでのポイントは以下の通りです。

  • SimpleDateFormatのパターンとして「yyyy-MM-dd'T'HH:mm:ss'Z'」を指定します。リテラル文字である「T」と「Z」はシングルクォートで囲むのが重要なポイントです。
  • parse()メソッドにISO 8601形式の文字列を渡すことで、Dateオブジェクトへの変換が行われます。

補足:java.time APIを使ったモダンな方法

APIレベル26(Android 8.0)以降をターゲットにしている場合は、より安全で推奨されるjava.time APIを使うこともできます。

import java.time.Instant
import java.time.format.DateTimeFormatter

val dtStart = "2020-07-05T09:27:37Z"
val instant: Instant = Instant.parse(dtStart)
// または DateTimeFormatter.ISO_INSTANT.parse(dtStart) を使用

Instant.parse()はISO 8601形式を直接パースできるため、SimpleDateFormatよりも簡潔でスレッドセーフです。古いAPIレベルをサポートする場合は、desugaring機能やThreeTenABPライブラリの利用も検討しましょう。

手順4:AndroidManifest.xmlを確認する

androidManifest.xml に以下のコードが含まれていることを確認します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
    </application>
</manifest>

アプリを実行する

それでは、アプリケーションを実行してみましょう。実機のAndroidスマートフォンをPCに接続しているものとします。Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンKotlinでAndroidアプリのISO 8601形式の日時文字列をDateオブジェクトに変換する方法をクリックします。接続したモバイルデバイスを選択すると、実機の画面に結果が表示されます。

KotlinでAndroidアプリのISO 8601形式の日時文字列をDateオブジェクトに変換する方法

実行すると、ISO 8601形式の文字列「2020-07-05T09:27:37Z」がDateオブジェクトに変換され、画面中央に変換結果が表示されます。

  1. 【Android開発】カラー整数(int)を16進数カラーコード文字列に変換する方法

    Androidアプリ開発では、色情報がint型の整数値として扱われることが多く、これを「#FF5733」のような16進数のカラーコード文字列に変換したいケースがあります。本記事では、Integer.toHexString()メソッドを使ってカラー整数を16進文字列に変換する方法を、実際のサンプルプロジェクトとともにわかりやすく解説します。変換の仕組みAndroidでは、色はARGB形式(アルファ・赤・緑・青)の32ビット整数として表現されます。そのため、-16895234のような負の値も有効なカラー整数です。Integer.toHexString(int)で16進文字列に変換した後、先頭2桁は

  2. Androidでミリ秒を日付形式に変換する方法【サンプルコード付き】

    この記事では、Androidアプリ開発においてミリ秒(long型のタイムスタンプ)を日付形式に変換する方法を、実際のサンプルコードとともに解説します。ミリ秒から日付への変換には、Java標準のSimpleDateFormatクラスを使用します。非常にシンプルな実装なので、初心者の方でもすぐに理解できるでしょう。実装手順ステップ1:新規プロジェクトを作成するAndroid Studioを開き、「File」⇒「New Project」を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトのセットアップを完了させてください。ステップ2:レイアウトファイル(activity_