안녕하세요.
오늘은 날짜와 관련된 코드에 대해 포스팅하도록 하겠습니다.
예를 들어 "2020-08-13 16:30" String을 Date 형태로 변환하여 날짜 계산을 한다던지,
"2020-08-13 16:30" String을 "2020.08.13 오후 4시 30분" 형태로 변환한다던지,
현재의 시간과 날짜를 구하던지,
아무튼 시작해 보겠습니다.
dateformat은 맨 아래에 테이블로 작성하도록 하겠습니다.
우선은 소스코드 먼저 공개하고 설명하도록 하겠습니다.
let dateStr = "2020-08-13 16:30" // Date 형태의 String
let nowDate = Date() // 현재의 Date (ex: 2020-08-13 09:14:48 +0000)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" // 2020-08-13 16:30
let convertDate = dateFormatter.date(from: dateStr) // Date 타입으로 변환
let myDateFormatter = DateFormatter()
myDateFormatter.dateFormat = "yyyy.MM.dd a hh시 mm분" // 2020.08.13 오후 04시 30분
myDateFormatter.locale = Locale(identifier:"ko_KR") // PM, AM을 언어에 맞게 setting (ex: PM -> 오후)
let convertStr = myDateFormatter.string(from: convertDate!)
let convertNowStr = myDateFormatter.string(from: nowDate) // 현재 시간의 Date를 format에 맞춰 string으로 반환
1. 현재의 Date를 원하는 Format으로 변환하고자 할 때
Date()를 선언하면 현재의 Date를 얻을 수 있다.
이때 얻은 Date는 "2020-08-13 09:14:48 +0000" 이러한 형태로 넘어온다.
"2020"08-13 09:14"의 형태로 바꾸고자 한다면 DateFormatter의 dateFormat이라는 함수를 이용하면 됩니다.
타입이 String이니 String을 넣어줍시다.
"yyyy-MM-dd HH:mm" (ex: 2020-08-13 09:14)
yyyy: 년도 (ex: 2020)
MM: 월 (ex: 08)
dd: 일 (ex: 13)
HH: 시간 (ex: 16 [24시간])
hh: 시간 (ex: 04 [12시간])
a: (ex: AM, PM Locale에 따라 오전, 오후로 표기 가능)
우선 자주 사용하는 형태만 먼저 작성하고 더 많은 형태는 아래에 정리하도록 하겠습니다.
dateFormat에 format에 해당하는 String값을 제외하고는 일반 String으로 표기됩니다.
예를 들면 2020년이라고 표기하고 싶으면
dateFormatter.dateFormat = "yyyy년" // "2020년"
이런 식으로 작성을 하는 겁니다.
간단하죠??
이제 format을 맞춰줬으니 Date를 포맷에 맞게 추출해 봅시다.
우선 방법은 간단합니다.
dateFormat을 선언한 DateFormatter()를 사용해야겠죠??
DateFormatter의 클래스 안에는 string을 뽑아내는 함수가 있습니다.
작명이 참 알아보기 쉽게 되어있죠??
string(from date: Date) 함수는 Date타입을 String으로 반환시켜주고,
date(from string: String) 함수는 String으로 들어온 것을 Date?로 반환시켜줍니다.
Date에는 ?(물음표)가 있는 것으로 보아 String의 format이 안 맞으면 nil값으로 반환해준다는 것이겠죠
사용방법은 간단합니다.
let str = dateFormatter.string(from: date!)
print(str) // 2020-08-13 16:30
어떤가요?? 참 간단하죠??
풀 소스입니다.
let nowDate = Date() // 현재의 Date (ex: 2020-08-13 09:14:48 +0000)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" // 2020-08-13 16:30
let str = dateFormatter.string(from: nowDate) // 현재 시간의 Date를 format에 맞춰 string으로 반환
2. String 타입으로 된 Date를 내가 원하는 형태로 변경하고자 할 때
1. String이 어떤 format으로 되어있는지 확인한다.
2. String을 Date로 변환한다.
3. Date를 내가 원하는 format으로 변경한다.
예를 들어서
"2020-08-13 13:30"인 String을 "2020년 08월 13일 오후 1시 30분" 형태로 변경해보겠습니다.
우선 첫 번째 "2020-08-13 13:30"의 형태는 "yyyy-MM-dd HH:mm"입니다.
시간에서 HH(24)와 hh(12) 잘 확인하시기 바랍니다.
두 번째 Date로 변환해줍니다.
설명은 생략하겠습니다.
세 번째 "2020년 08월 13일 오후 1시 30분" 형태를 만들어 보면
"yyyy년 MM월 dd일 a hh시 mm분"이 됩니다.
여기서 (오전/오후)를 한글로 나타내려면 Locale을 한국으로 설정하시면 되고,
(AM, PM)으로 나타내고 싶다 하시면 Locale설정을 안 하셔도 됩니다.
소스를 바로 작성해 보도록 하겠습니다.
let dateStr = "2020-08-13 16:30" // Date 형태의 String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" // 2020-08-13 16:30
let convertDate = dateFormatter.date(from: dateStr) // Date 타입으로 변환
let myDateFormatter = DateFormatter()
myDateFormatter.dateFormat = "yyyy년 MM월 dd일 a hh시 mm분" // 2020년 08월 13일 오후 04시 30분
myDateFormatter.locale = Locale(identifier:"ko_KR") // PM, AM을 언어에 맞게 setting (ex: PM -> 오후)
let convertStr = myDateFormatter.string(from: convertDate!)
만약 08월, 04시 이 부분에서 앞에 0을 빼고 싶으시면 dateFormat에서 M을 하나 빼주시면 됩니다.
"MM월" -> 08월
"M월" -> 8월
"HH시" -> 04시
"H시" -> 4시
이해가 되셨나요??
이 정도면 웬만한 건 다 응용이 가능할 겁니다.
아래에 DateFomat 정리하고 마무리하도록 하겠습니다.
감사합니다
Format | 설명 | Example |
"y" (년도) | year의 약자로 년도를 나타낸다. (최소 1자) | 1 -> "1" 150 -> "150" 2020 -> "2020" |
"yy" | 년도의 뒤 두자리수만 나타낸다. (최소 2자) | 1 -> "01" 150 -> "50" 2020 -> "20" 2050 -> "50" |
"yyy" | 년도의 세자리를 나타낸다. (최소 3자) | 5 -> "005" 25 -> "025" 2020 -> "2020" |
"yyyy" | 년도의 네자리를 나타낸다. (최소 4자) | 5 -> "0005" 350 -> "0350" 2020 -> "2020" |
"M" (월) | Month의 약자로 월을 나타낸다. (한자리) | 7 -> "7" 11 -> "11" |
"MM" | 월의 두자리를 나타낸다. | 7 -> "07" 11 -> "11" |
"MMM" | 세자리의 약어로 표현 (Locale에 따라 다름) | Locale - ko_KR 7 -> "7월" 11 -> "11월" default 7 -> "Jul" 11 -> "Nov" |
"MMMM" | 월을 전체적으로 표현 | Locale - ko_KR 7 -> "7월" 11 -> "11월" default 7 -> "July" 11 -> "November" |
"d" (일) | day의 약자로 일을 구함 | 5 -> "5" 15 -> "15" |
"dd" | 일을 두자리로 구함 | 5 -> "05" 15 -> "15" |
"E", "EE", "EEE" (요일) | 요일을 약어로 나타냄 (Locale에 따라 다름) | Locale - ko_KR 금요일 -> "금" default 금요일 -> "Fri" |
"EEEE" | 요일을 전체적으로 표현 | Locale - ko_KR 금요일 -> "금요일" default 금요일 -> "Friday" |
"EEEEE" | 요일을 한글자로 표현 | Locale - ko_KR 금요일 -> "금" default 금요일 -> "F" |
"EEEEEE" | 요일을 두글자로 표현 | Locale - ko_KR 금요일 -> "금" default 금요일 -> "Fr" |
"a" (오전, 오후) | 오전, 오후를 나타냄 (Locale에 따라 다름) | Locale - ko_KR 오전 -> "오전" 오후 -> "오후" default 오전 -> "AM" 오후 -> "PM" |
"h" (시간) | 시간을 12시간으로 표현( 한자리) | 3 -> "3" 11 -> "11" 23 -> "11" |
"hh" | 시간을 12시간으로 표현 (두자리) | 3 -> "03" 11 -> "11" 23 -> "11" |
"H" | 시간을 24시간으로 표현 (한자리) | 3 -> "3" 11 -> "11" 23 -> "23" |
"HH" | 시간을 24시간으로 표현 (두자리) | 3 -> "03" 11 -> "11" 23 -> "23" |
"m" (분) | 분을 표현 (한자리) | 3 -> "3" 45 -> "45" |
"mm" | 분을 표현 (두자리) | 3 -> "03" 45 -> "45" |
"s" (소문자) (초) | 초를 표현 (한자리) | 3 -> "3" 45 -> "45" |
"ss" | 초를 표현 (두자리) | 3 -> "03" 45 -> "45" |
"S" (대문자) (밀리초) | 밀리초 표현 (한자리) | 0.12 -> "0.1" 0.713 -> "0.7" |
"SS" | 밀리초 표현 (두자리) | 0.12 -> "0.12" 0.713 -> "0.71" |
"SSS" | 밀리초 표현 (세자리) | 0.12 -> "0.120" 0.713 -> "0.713" |
감사합니다.
'Swift' 카테고리의 다른 글
[Swift] 소수점 다루기 반올림(round), 올림(ceil), 내림(floor) 등등 (0) | 2021.08.08 |
---|