날짜 다루기

iOS에서 날짜를 다루는 방법에 대해 알아보자.

Alpaca
4 min readFeb 23, 2018

Swift에서 날짜를 다루는 타입으로는 Date, DateFormatter, Calendar, DateComponent 등이 있다.

Date

시간의 특정 시점을 나타내는 구조체로 달력이나 타임 존에 독립적이다. 날짜 비교, 날짜 간격 계산, 날짜 간격으로 새 날짜 생성 등 다양한 메서드를 지원한다. 참고로Objective-C에서는 NSDate라는 클래스를 이용했는데 iOS 7 이후 Swift에서는 Date 구조체로 이와 같은 기능을 제공한다.

Date 타입의 초기화는 다음과 같이 할 수 있다.

Date 초기화

위의 초기화에서 timeInterval은 TimeInterval 타입을 말하며 이는 Double 타입의 typealias로 시간의 초를 나타낸다. 특정 시점을 나타내는 Date 타입에 TimeInterval을 더하고 뺌으로써 새로운 Date를 얻을 수 있다. 또한 Date 구조체는 날짜 간 비교를 지원한다.

Date에 TimeInterval을 더하고 비교하기

DateFormatter

Date 타입은 날짜의 한 지점을 나타내지만 이것을 텍스트로 표현하고 싶을 때는 DateFormatter를 사용한다.

DateFormatter를 인스턴스화 시켜 사용하며 dateStyle, timeStyle, locale, 그리고 dateFormat을 통해 다양한 방법으로 Date를 표시한다.

DateFormatter의 다양한 표현 방법

DateFormatter를 사용하면 String으로부터 Date를 얻어오는 것도 가능해진다. 이 때 String이 DateFormatter의 형식과 맞지 않을 경우에는 nil을리턴해야하므로 반환형이 Optional이다. Date Format은 Apple의 Date Formatting Guide를 참고하면 된다.

String에서 Date를 얻는 방법

Calendar

달력과 관련된 정보를 담는 구조체로 달력과 관련된 계산과 각 달력의 요소인 DateComponent를 얻을 수 있다.

Calendar의 생성은 Calendar.Identifier 열거형을 init 메소드에 전달함으로써 이루지는데 이는 나라 또는 종교 별로 달력이 다르기 때문이다.

인스턴스로 만든 뒤에는 달력의 요소를 나타내는 DateComponent 구조체에 관한 다양한 메서드를 사용할 수 있다. Date에서 DateComponent를 뽑아낼 수도 있고 반대로 DateComponent를 통해 Date를 만들어 낼 수도 있다.

DateComponent의 사용예

그 외에도 AM/PM, Weekday, Month, Quarter, Era 등 locale 설정 별로 달라질 수 있는 Symbols의 배열을 얻을 수 있다.

Calendar로부터 날짜 요소별 Symbols 얻기

--

--