(Kotlin/코틀린) SimpleDateFormat 사용법 정리

개요


1. 기본 사용법

1.1 Date → String

val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formatted = sdf.format(Date())

// 2026-01-31 09:20:00

1.1 String → Date

val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
val date = sdf.parse("2026-01-31")

// parse()는 실패 시 ParseException을 던질 수 있음

2. 자주 쓰는 날짜 포맷 패턴

패턴 의미 예시
yyyy 연도 2026
MM 월(01~12) 01
dd 31
HH 시(24h) 09
mm 20
ss 00
E 요일 Sat
a 오전/오후 AM

3. Locale을 꼭 지정해야 하는 이유

// ❌ 잘못된 예:
SimpleDateFormat("yyyy-MM-dd")

// ✅ 권장:
SimpleDateFormat("yyyy-MM-dd", Locale.KOREA)
SimpleDateFormat("yyyy-MM-dd", Locale.US)

4. TimeZone 설정 (서버/UTC 처리 시 필수)

val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US)
sdf.timeZone = TimeZone.getTimeZone("UTC")

val date = sdf.parse("2026-01-31T00:00:00")

// 한국 시간으로 변환:
sdf.timeZone = TimeZone.getTimeZone("Asia/Seoul")

5. 실무 권장 패턴

5-1. 매번 새로 생성

fun formatDate(date: Date): String {
    return SimpleDateFormat("yyyy-MM-dd", Locale.KOREA)
        .format(date)
}

5-2. runCatching과 함께 쓰기 (파싱 실패 대비)

fun parseDate(text: String): Date? {
    return runCatching {
        SimpleDateFormat("yyyy-MM-dd", Locale.KOREA).parse(text)
    }.getOrNull()
}

6. Android 26+ / Java 8+ 권장 대안

val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val date = LocalDate.parse("2026-01-31", formatter)


Related Posts