Swift 에서 날짜/시간 다루기 - Date, DateFormatter, Calendar

개발/iOS - Swift1 2025. 12. 4. 09:37

1. 현재 날짜·시간 가져오기

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)
}

 

반응형
admin