Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Kotlin으로 안드로이드에서 ISO 8601 문자열을 날짜·시간 객체로 변환하는 방법

이 튜토리얼에서는 Kotlin을 사용해 안드로이드에서 ISO 8601 형식의 날짜·시간 문자열(예: 2020-07-05T09:27:37Z)을 Date 객체로 변환하는 방법을 단계별로 살펴봅니다.

구현 단계

1단계 — 새 프로젝트 만들기

Android Studio에서 File → New Project 메뉴로 이동한 뒤, 필요한 모든 정보를 입력하여 새 프로젝트를 생성합니다.

2단계 — 레이아웃 작성 (res/layout/activity_main.xml)

메인 레이아웃 파일에 아래 코드를 추가합니다. 상단에는 앱 타이틀용 TextView, 화면 중앙에는 변환 결과를 표시할 TextView가 배치되어 있습니다.

<?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:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerInParent="true"
       android:textAlignment="center"
       android:textColor="@android:color/holo_red_dark"
       android:textSize="24sp"
       android:textStyle="bold" />

</RelativeLayout>

3단계 — 메인 액티비티 작성 (src/MainActivity.kt)

MainActivity.kt에 아래 코드를 추가합니다. 핵심은 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") 패턴을 사용해 ISO 8601 문자열을 파싱하는 부분입니다.

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"
    }
}

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 Studio에서 프로젝트의 액티비티 파일 중 하나를 연 후, 툴바의 Run 아이콘Kotlin으로 안드로이드에서 ISO 8601 문자열을 날짜·시간 객체로 변환하는 방법을 클릭하세요. 실행 옵션에서 자신의 모바일 기기를 선택하면, 기기 화면에 아래와 같이 변환된 날짜·시간 값이 표시됩니다.

Kotlin으로 안드로이드에서 ISO 8601 문자열을 날짜·시간 객체로 변환하는 방법


추가 팁: java.time API 활용 (API 26 이상)

SimpleDateFormat 패턴에서 'Z'는 실제 시간대 오프셋이 아니라 단순한 리터럴 문자로 해석된다는 점에 유의해야 합니다. 따라서 UTC 기준으로 정확히 파싱하려면 format.timeZone = TimeZone.getTimeZone("UTC")를 함께 지정하는 것이 안전합니다.

minSdkVersion이 26 이상이라면 스레드 안전성과 불변성이 보장되는 java.time API를 사용하는 것을 권장합니다.

val dateTime = OffsetDateTime.parse("2020-07-05T09:27:37Z")
// 또는
val instant = Instant.parse("2020-07-05T09:27:37Z")

API 26 미만 버전도 지원해야 한다면, Android Gradle 플러그인 4.0 이상에서 제공하는 coreLibraryDesugaring을 적용하면 하위 버전에서도 java.time을 그대로 사용할 수 있습니다.