Objective-C 배경을 가진 개발자라면 한 가지 좋은 소식이 있습니다. 더 이상 NSDate를 직접 사용할 필요가 없다는 점입니다. Swift는 자체 구조체(struct) 타입인 Date를 정의했으며, Date는 내부적으로 NSDate 클래스와 브리징되어 있어 Objective-C API와 상호작용하는 코드에서도 두 타입을 자유롭게 혼용할 수 있습니다.
Date에 대해 더 자세히 알고 싶다면 Apple 공식 문서(developer.apple.com/documentation/foundation/date)를 참고하세요.
이 글에서는 Swift에서 날짜 객체를 생성하는 세 가지 방법을 Playground를 통해 하나씩 살펴보겠습니다.
1. 현재 날짜와 시간(UTC) 가져오기
가장 간단한 방법은 Date() 객체를 생성하는 것입니다. 아래 코드를 Playground에 입력하고 실행해 보세요.
let currentDateAndTime = Date() print(currentDateAndTime)
이 코드는 현재 시점의 UTC 기준 날짜와 시간을 반환합니다. 별도의 설정 없이 즉시 사용할 수 있는 가장 쉬운 방법입니다.
2. DateFormatter로 문자열을 날짜로 변환하기
두 번째 방법은 DateFormatter를 활용하는 것입니다. 문자열 형태의 날짜 데이터를 원하는 포맷의 Date 객체로 변환할 때 유용합니다.
let stringDate = "2019-10-10" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" let date = dateFormatter.date(from: stringDate) print(date ?? "")
dateFormat 속성에 원하는 패턴(예: "yyyy-MM-dd", "yyyy년 MM월 dd일" 등)을 지정하면 다양한 형식의 문자열을 손쉽게 변환할 수 있습니다. 변환에 실패하면 nil이 반환되므로 옵셔널 처리에 유의해야 합니다.
3. DateComponents로 날짜 조합하기
세 번째 방법은 DateComponents를 사용하는 것입니다. 연도, 월, 일, 시간, 분, 초, 심지어 타임존까지 직접 지정하여 정밀한 날짜 객체를 만들 수 있습니다.
var date = DateComponents() date.year = 2019 date.month = 12 date.day = 12 date.timeZone = TimeZone(abbreviation: "IST") date.hour = 12 date.minute = 34 date.second = 55 let userCalendar = Calendar.current let dateAndTime = userCalendar.date(from: date) print(dateAndTime ?? "")
Calendar.current.date(from:) 메서드에 DateComponents를 전달하면 지정된 값들로 구성된 Date 객체가 생성됩니다. 특정 시점의 날짜를 코드로 명확하게 표현해야 할 때 특히 유용합니다.
마무리
정리하면, Swift에서 Date 객체를 생성하는 대표적인 방법은 다음과 같습니다.
- Date(): 현재 날짜와 시간이 필요할 때
- DateFormatter: 문자열을 날짜로 변환할 때
- DateComponents + Calendar: 연·월·일·시·분·초를 직접 지정할 때
상황에 맞는 방법을 선택하면 날짜 관련 로직을 훨씬 깔끔하게 작성할 수 있습니다.