
주로 DatePicker를 사용하여 선택한 날짜에 대한 정보를 사용하고 싶을 때 사용하게 된다.
DatePicker에서 선택한 날짜는 date 타입으로 바로 문자열로 사용할 수 없고 DateFormatter()를 사용해서 변환해야한다. 마찬가지로 Date to String, String to Date 모두 변환 가능하다.
@IBAction func datePickerValueChanged(_ sender: UIDatePicker) {
let format = DateFormatter()
format.dateFormat = "yy년 MM월 dd일"
let value = format.string(from: sender.date)
}
Date를 String으로 변환하기 위해 format이라는 변수에 DateFormatter() 객체를 할당하고 dateFormat이라는 속성을 활용하는데 이때 dateFormat을 활용하여 원하는 형식을 지정할 수 있다.
| Format | 설명 | 예시 |
|---|---|---|
| y | 년도 그대로 표시 | 1 -> "1" 150 -> "150" 2020 -> "2020" |
| yy | 년도의 두 뒤자리수 | 2020 -> "20" 2050 -> "50 |
| yyy | 년도 (최소)세자리 | 5 -> "005" 2020 -> "2020" |
| yyyy | 년도 (최소)네자리 | 2020 |
| M | 월(0이 생략된) | 7, 11 |
| MM | 월(두자리) | 07, 11 |
| MMM | 약어로 표현(Locale에 따라 다름) | 7월, 11월 Jul, Nov |
| MMMM | 월(전체적인 표현) | 7월, 11월 July, November |
| d | 일(0이 생략된) | 5, 15 |
| dd | 일(두자리) | 05, 15 |
| E, EE, EEE | 요일의 약어(Locale에 따라 다름) | 금, Fri |
| EEEE | 요일(전체적인 표현) | 금요일, Friday |
| EEEEE | 요일을 한 글자로 표현 | 금, F |
| EEEEEE | 요일을 두 글자로 표현 | 금, Fr |
| a | 오전, 오후로 표현(Locale에 따라 다름) | 오전, 오후 AM, PM |
| h | 시간(12시간 기준)(0 생략) | 3, 11 |
| hh | 시간(12시간 기준)(두 자리) | 03, 11 |
| H | 시간(24시간 기준)(0 생략) | 3, 23 |
| HH | 시간(24시간 기준)(두 자리) | 03, 23 |
| m | 분(0 생략) | 3, 10 |
| mm | 분(두 자리) | 03, 10 |
locale: 오전/오후를 한글로 나타내고 싶은 경우에 한국으로 설정해줘야함 (ex. Locale(identifier: "ko_KR"), default는 영어)
dateFormat 안에 format에 해당하는 구성 요소를 제외하고는 일반 String으로 표기된다.
따라서 2021년이라고 표기하고 싶다면 "yyyy년"이라고 작성하면 된다.
카카오톡의 오전 10:20의 경우,
let format = DateFormatter()
format.locale = Locale(identifier: "ko_KR")
format.dateFormat = "a h:mm"
let value = format.string(from: date)
이런식으로 구성하지않았을까...!