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