날짜 다루기
Swift에서 날짜를 다루는 타입으로는 Date, DateFormatter, Calendar, DateComponent 등이 있다.
Date
시간의 특정 시점을 나타내는 구조체로 달력이나 타임 존에 독립적이다. 날짜 비교, 날짜 간격 계산, 날짜 간격으로 새 날짜 생성 등 다양한 메서드를 지원한다. 참고로Objective-C에서는 NSDate라는 클래스를 이용했는데 iOS 7 이후 Swift에서는 Date 구조체로 이와 같은 기능을 제공한다.
Date 타입의 초기화는 다음과 같이 할 수 있다.
위의 초기화에서 timeInterval은 TimeInterval 타입을 말하며 이는 Double 타입의 typealias로 시간의 초를 나타낸다. 특정 시점을 나타내는 Date 타입에 TimeInterval을 더하고 뺌으로써 새로운 Date를 얻을 수 있다. 또한 Date 구조체는 날짜 간 비교를 지원한다.
DateFormatter
Date 타입은 날짜의 한 지점을 나타내지만 이것을 텍스트로 표현하고 싶을 때는 DateFormatter를 사용한다.
DateFormatter를 인스턴스화 시켜 사용하며 dateStyle, timeStyle, locale, 그리고 dateFormat을 통해 다양한 방법으로 Date를 표시한다.
DateFormatter를 사용하면 String으로부터 Date를 얻어오는 것도 가능해진다. 이 때 String이 DateFormatter의 형식과 맞지 않을 경우에는 nil을리턴해야하므로 반환형이 Optional이다. Date Format은 Apple의 Date Formatting Guide를 참고하면 된다.
Calendar
달력과 관련된 정보를 담는 구조체로 달력과 관련된 계산과 각 달력의 요소인 DateComponent를 얻을 수 있다.
Calendar의 생성은 Calendar.Identifier 열거형을 init 메소드에 전달함으로써 이루지는데 이는 나라 또는 종교 별로 달력이 다르기 때문이다.
인스턴스로 만든 뒤에는 달력의 요소를 나타내는 DateComponent 구조체에 관한 다양한 메서드를 사용할 수 있다. Date에서 DateComponent를 뽑아낼 수도 있고 반대로 DateComponent를 통해 Date를 만들어 낼 수도 있다.
그 외에도 AM/PM, Weekday, Month, Quarter, Era 등 locale 설정 별로 달라질 수 있는 Symbols의 배열을 얻을 수 있다.
Reference