TimeInterval 타입은 날짜 및 시간 관련한 표현에 사용하는 타입으로 초(second)를 나타낸다. 즉, 값이 1이면 1초를 나타낸다. 그러나 사실 TimeInterval은 이름만 다른 Double 타입이다. 타입 별칭(Type alias)이라는 기능을 활용하여 이름만 달라진 것이다. 이미 존재하는 타입의 기능을 똑같이 구현할 필요는 없으나 Double이라는 이름보다는 TimeInterval이라는 이름으로 표현하는 것이 더 직관적이므로 타입 별칭을 사용해준 것이다.
시각(Date)과 문자열 표현(String)을 상호 변환해주는 역할을 수행하는 타입이다. 시간을 원하는 타입으로 만들 수 있다. Date타입은 날짜의 한 지점을 나타내지만 이것을 텍스트로 표현하고 싶을 때에 주로 활용한다. DateFormatter을 인스턴스화 시켜 사용하며 dateStyle, timeStyle, locale, 그리고 dateFormat을 통해 다양한 방법으로 Date를 표시한다.
👉🏻 example
let date =Date()
let dateFormatter =DateFormatter() // 인스턴스 생성
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .medium
dateFormatter.locale =Locale(identifier: "en_US")
print(dateFormatter.string(from: date)) // Aug 24, 2021 at 8:55:52 PM
dateFormatter.locale =Locale(identifier: "fr_FR")
print(dateFormatter.string(from: date)) // 24 août 2021 à 20:55:52
dateFormatter.locale =Locale(identifier: "ko_KR")
print(dateFormatter.string(from: date)) // 2021. 8. 24. 오후 8:55:52
dateFormatter.dateFormat ="YY년 M월 d일 h시 mm분 ss초"print(dateFormatter.string(from: date)) // 21년 8월 24일 8시 55분 52초
DateFormatter를사용하면 String으로부터 Date를얻어오는것도가능해진다. 이때 String이 DateFormatter의형식과맞지않을경우에는 nil을리턴해야하므로반환형이 Optional이다.
// 인스턴스 생성let formatter =DateFormatter()
// Date to Stringlet now =Date()
let formatter =DateFormatter()
formatter.dateFormat ="yyyy년 MM월 dd일 HH시 mm분 ss초"let result = formatter.string(from: now)
print(result) // 2021년 08월 24일 20시 08분 32초// String to Datelet dateString ="2021년08월24일 20시10분11초 +0000"
formatter.dateFormat ="yyyy년MM월dd일 HH시mm분ss초 ZZZZ"let date = formatter.date(from: dateString)!print(date) // 2021-08-24 20:10:11 +0000
변환하는 결과가 옵셔널인 이유는 변환할 문자열이 포맷이랑 동일하지 않을 수도 있기 때문이다. 위 예제에서는 강제 언래핑을 사용하고 있지만 에러가 발생할 수 있으므로 옵셔널 바인딩을 해야한다.
말 그대로 타임존의 명칭을 의미한다. 세계의 각 지역에 따라 시간대가 다른데, 그 시간대를 나타내기 위한 Foundation의 타입이다. 날짜 계산이나 날짜 표현 등의 작업을 수행할 때 꼭 TimeZone을 잘 확인해야 한다. 같은 시각이라도 TimeZone에 따라서 날짜 표현이 달라질 수 있기 때문이다.
👉🏻 example
let date =Date()
let formatter =DateFormatter()
formatter.dateFormat ="yyyy-MM-dd HH:mm:ss"
formatter.locale =Locale(identifier: "ko_kr") // 한국의 시간을 지정해준다.
formatter.timeZone =TimeZone(abbreviation: "KST") // 한국의 시간대로 지정한다.//formatter.timeZone = TimeZone.current // 현재 사용자의 시간대를 지정한다.let kr = formatter.string(from: date) // Date to Stringprint(kr) // 2021-08-25 01:17:53
달력과 관련된 정보를 담는 구조체이다. 달력과 관련된 계산과 각 달력의 요소인 DateComponent를 얻을 수 있다.
Calendar의 생성은 Calendar.Identifier 열거형을 init 메소드에 전달함으로써 이루어지는데 이는 나라 또는 종교 별로 달력이 다르기 때문이다. 인스턴스로 만든 뒤에는 달력의 요소를 나타내는 DateComponent 구조체에 관한 다양한 메서드를 사용할 수 있다. Date에서 DateComponent를 뽑아낼 수도 있고 반대로 DateComponent를 통해 Date를 만들어 낼 수도 있다.
👉🏻 example
let date =Date()
var calendar =Calendar(identifier: .gregorian)
print(calendar.dateComponents([.day, .month], from: date)) // month: 8 day: 25 isLeapMonth: falsevar dateComponents =DateComponents()
dateComponents.year =1995print(calendar.date(from: dateComponents)) // Optional(1994-12-31 15:00:00 +0000)
그 외에도 AM/PM, WeekDay, Month, Quarter, Era 등 locale 설정 별로 달라질 수 있는 Symbols의 배열을 얻을 수도 있다.