Swift 에서 날짜/시간 다루기 - Date, DateFormatter, Calendar
개발/iOS - Swift1 2025. 12. 4. 09:371. 현재 날짜·시간 가져오기
Swift에서 현재 시각을 가져오는 방법은 정말 단순합니다.
let now = Date()
print(now)
이렇게 하면 시스템 기준 현재 시간(Date 객체)이 들어옵니다.
다만 Date()는 우리가 흔히 말하는 "2025-12-04 10:12:33" 같은 형태가 아니라, 절대 시간을 기준으로 한 객체이기 때문에 사람이 읽을 수 있도록 포맷을 바꿔주는 과정이 필요합니다.
2. 날짜를 문자열로 바꾸기
가장 많이 쓰는 작업입니다. 화면에 날짜를 보여줄 때 사용하죠.
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let result = formatter.string(from: date)
print(result)
자주 쓰는 날짜 포맷 예시
| 목적 | 포맷 | 출력 예 |
| 기본 날짜 | "yyyy-MM-dd" | 2025-12-04 |
| 기본 날짜+시간 | "yyyy-MM-dd HH:mm:ss" | 2025-12-04 10:11:00 |
| 한국식 표기 | "yyyy년 MM월 dd일" | 2025년 12월 04일 |
| 시간만 | "HH:mm" | 10:20 |
| 요일 포함 | "yyyy-MM-dd (E)" | 2025-12-04 (Thu) |
3. 특정 문자열을 Date로 변환하기
반대로, 서버에서 "2025-12-04 10:00:00"처럼 문자열을 받은 뒤 Date로 바꿔야 하는 상황도 많습니다.
let str = "2025-12-04 10:00:00"
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
if let date = formatter.date(from: str) {
print(date)
}
포맷이 정확히 일치하지 않으면 nil이 나오기 때문에, 포맷을 신경써서 맞춰주셔야 합니다.
4. TimeZone 설정하기 (한국 시간, UTC 등)
서버 시간은 대부분 UTC를 쓰고, 앱 화면에서는 한국시간(KST)을 보여주는 경우가 많습니다.
DateFormatter에 타임존을 넣어주기만 하면 됩니다.
UTC → 한국시간(KST) 문자열 변환
let utcDate = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
formatter.timeZone = TimeZone(abbreviation: "KST") // 한국시간 적용
let kstString = formatter.string(from: utcDate)
print(kstString)
UTC 기준 문자열을 Date로 만들기
formatter.timeZone = TimeZone(abbreviation: "UTC")
이렇게 포맷터의 타임존만 변경하면 됩니다.
5. Locale 설정하기 (언어/지역 포맷)
영문, 한글, 일본어 등 표시 형식을 Locale로 지정할 수 있습니다.
let formatter = DateFormatter()
formatter.dateStyle = .full
formatter.timeStyle = .short
formatter.locale = Locale(identifier: "ko_KR")
let text = formatter.string(from: Date())
print(text)
| Locale | 의미 | 예시 출력 |
| ko_KR | 한국 | 2025년 12월 4일 목요일 |
| en_US | 미국 | Thursday, December 4, 2025 |
| ja_JP | 일본 | 2025年12月4日(木) |
Locale을 바꾸면 날짜 표기 방식 자체가 달라집니다.
6. ISO8601 날짜 다루기 (서버 응답에서 자주 사용)
REST API에서는 대부분 ISO8601 포맷을 사용합니다.
예: "2025-12-04T01:22:33Z"
이럴 때는 ISO8601DateFormatter가 더 편합니다.
let isoString = "2025-12-04T01:22:33Z"
let formatter = ISO8601DateFormatter()
if let date = formatter.date(from: isoString) {
print(date)
}
만약 밀리초까지 포함되어 있다면?
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
7. Calendar로 연/월/일·시/분/초 추출하기
날짜 객체에서 특정 값만 꺼내고 싶을 때는 Calendar를 사용합니다.
let now = Date()
let calendar = Calendar.current
let year = calendar.component(.year, from: now)
let month = calendar.component(.month, from: now)
let day = calendar.component(.day, from: now)
let hour = calendar.component(.hour, from: now)
print(year, month, day, hour)
기본적인 UI 표시나 조건 체크할 때 자주 쓰는 방식입니다.
8. 날짜를 원하는 형태로 재구성하기
예를 들어 "오늘 날짜의 0시 0분 0초로 만들기" 같은 설정도 Calendar로 가능합니다.
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day], from: Date())
if let startOfDay = calendar.date(from: components) {
print(startOfDay)
}
반응형




