개요
이 글에서는 Android 앱에서 ISO 8601 형식의 날짜·시간 문자열을 Date 객체로 변환하는 방법을 예제를 통해 살펴봅니다.
ISO 8601은 날짜와 시간을 표현하는 국제 표준 형식으로, 서버 API 응답이나 로그 데이터에서 널리 사용됩니다. 대표적인 예는 2019-08-15T09:27:37Z처럼 날짜와 시간 사이에 'T'가, 끝에는 UTC를 의미하는 'Z'가 붙는 형태입니다.
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"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:padding="20sp"
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="12sp"
android:textStyle="bold"/>
</RelativeLayout>
3단계 — 메인 액티비티 작성(MainActivity.java)
src/MainActivity.java 파일에 아래 코드를 추가합니다. 핵심은 SimpleDateFormat에 yyyy-MM-dd'T'HH:mm:ss'Z' 패턴을 지정하는 부분입니다.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
String dtStart = "2019-08-15T09:27:37Z";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
Date date = format.parse(dtStart);
textView.setText("ISO 8601 date/time: " + date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
패턴에서 'T'와 'Z'는 작은따옴표로 감싸 있어 리터럴 문자로 그대로 해석됩니다. 파싱에 성공하면 화면의 TextView에 변환된 Date 객체가 출력됩니다.
4단계 — 매니페스트 설정(AndroidManifest.xml)
androidManifest.xml 파일에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<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 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 Run 아이콘을 클릭한 뒤, 목록에서 본인의 모바일 기기를 선택하세요. 그러면 기기 화면에 변환된 날짜/시간이 아래와 같이 표시됩니다.

추가 팁: java.time API 활용
API 26(Android 8.0) 이상을 대상으로 한다면 SimpleDateFormat보다 스레드에 안전하고 직관적인 java.time API를 사용하는 것이 좋습니다.
OffsetDateTime odt = OffsetDateTime.parse("2019-08-15T09:27:37Z");
Date date = Date.from(odt.toInstant()); // 하위 호환이 필요한 경우
또한 시간대 관련 오류를 방지하려면 format.setTimeZone(TimeZone.getTimeZone("UTC"))처럼 시간대를 명시적으로 지정해 주는 것이 좋습니다.