Android 오늘 날짜/시간 포맷팅하기 (SimpleDateFormat & java.time)
✨ 개요
Android 앱에서 날짜와 시간을 표시하는 기능은 매우 흔하게 사용됩니다.
예: 오늘 날짜를 “yyyy-MM-dd” 형태로 보여주거나, 서버 로그에 ISO 8601 형식을 사용하는 경우 등.
- 오늘 날짜/시간 가져오는 방법
- 다양한 포맷 적용 예시
SimpleDateFormat
vsjava.time
(LocalDateTime 등) 차이
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
- SimpleDateFormat은 안드로이드의 구버전부터 사용 가능
- java.util.Date 기반입니다.
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.🧠 결론
- 날짜/시간 출력은 SimpleDateFormat으로도 충분하지만, 최신 앱에서는 java.time 기반 사용을 권장합니다.
- 서버와 시간 동기화가 필요하다면 ISO 8601 포맷을 사용하세요.
- 포맷 문자열은 앱 목적(로그, UI, API 응답)에 따라 선택적으로 사용하면 됩니다.