Android 오늘 날짜/시간 포맷팅하기 (SimpleDateFormat & java.time)

✨ 개요

Android 앱에서 날짜와 시간을 표시하는 기능은 매우 흔하게 사용됩니다.
예: 오늘 날짜를 “yyyy-MM-dd” 형태로 보여주거나, 서버 로그에 ISO 8601 형식을 사용하는 경우 등.


1. ✅ SimpleDateFormat 사용 (Java 방식)

1.1 기본 사용법

import java.text.SimpleDateFormat
import java.util.*

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

println("현재 시간: $formattedDate") // 예: 2024-04-29 11:23:45

1.2 자주 쓰는 날짜/시간 포맷 예시 (SimpleDateFormat & java.time 공통)

포맷 문자열 출력 예시 설명
yyyy-MM-dd 2024-04-29 연-월-일
HH:mm:ss 13:45:20 시:분:초 (24시간제)
a hh:mm AM 09:32 오전/오후 포함 12시간제
yyyy.MM.dd EEEE 2024.04.29 Monday 요일 포함
yyyy/MM/dd HH:mm 2024/04/29 15:30 날짜 + 시간
yyyyMMdd 20240429 서버 전송용 숫자 포맷
yyyy-MM-dd'T'HH:mm:ss 2024-04-29T14:50:00 ISO 8601 형식(기본 형태)
yyyy-MM-dd'T'HH:mm:ss.SSSZ 2024-04-29T14:50:00.000+0900 ISO 8601 + 밀리초 + 타임존
EEEE, MMM dd, yyyy Monday, Apr 29, 2024 영어 날짜 표현
hh:mm:ss a 02:45:30 PM 12시간제 + 오전/오후

2. ✅ LocalDateTime 사용 (Java 8+ / API 26+)

Android API 26부터는 java.time 패키지 사용이 가능하며, 더 안전하고 직관적입니다.

2.1 📌 기본 사용법

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

val now = LocalDateTime.now()
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val formatted = now.format(formatter)

println("현재 시간(LocalDateTime): $formatted")

2.2. 📌 ISO 8601 포맷

val now = LocalDateTime.now()
val isoFormatter = DateTimeFormatter.ISO_DATE_TIME
val isoString = now.format(isoFormatter)
// 예: 2024-04-29T13:46:11.123

java.time은 Null-safe하고, ZonedDateTime과 같은 시간대 지원도 용이해 백엔드 통신에 적합합니다.


3.✅ 사용자 정의 확장 함수 예제

fun Date.format(pattern: String): String {
    val formatter = SimpleDateFormat(pattern, Locale.getDefault())
    return formatter.format(this)
}

// 사용 방법
val today = Date()
println(today.format("yyyy-MM-dd")) // 2024-04-29

4.🔄 SimpleDateFormat vs LocalDateTime 비교

항목 SimpleDateFormat LocalDateTime (java.time)
API 도입 시기 Java 1.1 / Android 초기부터 Java 8 (Android API 26 이상)
패키지 java.text.SimpleDateFormat java.time.LocalDateTime, DateTimeFormatter
스레드 안전성 ❌ 비스레드 안전 (동기화 필요) ✅ 기본적으로 스레드 안전
사용성 포맷팅 간단하지만 날짜 계산이 복잡함 날짜 계산 및 비교가 직관적이고 확장성 높음
시간대(TimeZone) 지원 제한적 (수동 설정 필요) ZonedDateTime, OffsetDateTime 등 풍부
형식 유연성 다양한 포맷 문자열 지원 표준 포맷 + 커스텀 포맷 모두 지원
가독성 구버전 API 특유의 복잡성 있음 ✅ 모던한 설계로 가독성 우수
안드로이드 지원 범위 모든 Android 버전에서 사용 가능 API 26 (Android 8.0) 이상만 지원
권장 사용 시점 구버전 호환성 필요 시 최신 앱, 서버 통신, 날짜 연산 등 전반 추천

5.🧠 결론



Related Posts