안녕하세요 녕입니다. 오늘은 DateFormatter를 털어보고자 합니다. (살살)
매번 데이터 포맷 관련 구현을 할 때마다 구글링하는 제 모습이 싫어서 언젠가 꼭 정리해보고자 했던 다짐.
드디어 실행해봅니다. 하하
❤︎ 들어가기 전...
Swift의 Foundation > Formatter는 굉장히 많습니다.
class Formatter: NSObject
Formatter는 말 그대로 어떤 형식의 포맷(형태)을 만들어주는 NSObject 클래스로, 아래와 같이 여러 subclass 들이 존재하는데요.
- DateFormatter
- NumberFormatter
- DateIntervalFormatter
- ByteCountFormatter
- DateComponents
- MeasurementFormatter
- PersonNameCompomentsFormatter
호달달... 우선 제일 자주 사용하고, 급한 DateFormatter를 공부해보도록 해보겠습니다.
들어가기 전에 DateFormatter.. 이걸 언제 사용하는데? 싶을 수 있죠. 먼저 예제 하나를 보겠습니다.
앱을 만들다보면 서버에서 문자열 형태의 날짜를 받을 수 있는데염
예를 들어, 오후 1시 24분라는 시간 값을 “1324”로 받을 수 있는데 이를 그대로 표출하고 싶지 않습니다. 저는 이 문자열을 “1:24”로 바꾸고 앱에 표출해서 사용자에게 보여주고 싶은데요. 이럴 때 사용할 수 있는게 바로 ✨DateFormatter!✨ (여기서 DateFormatter는 시간 뿐만 아니라 년/월/일 값이 들어간 날짜도 포함됩니다. 당연함, DateFormatter임)
DateFormatter
▶️ 날짜와 텍스트 사이를 변환하는 형식
class DateFormatter: Formatter
- DateFormatter의 인스턴스는 NSDate 객체의 문자열을 생성
- 날짜와 시간의 텍스트 표현 ➡️ NSDate 객체 변환
- 날짜 및 시간을 사용자가 볼 수 있도록 다양한 현지화된 설정 및 구성 옵션 제공
- 날짜 및 시간의 고정 형식 표현을 위해 커스텀 형식 문자열 지정 가능
생각보다 위의 텍스트가 머리에 안들어오지 않나요. 그래서 제가 간단히 정리해봤숩니다.
DateFormatter는 아래와 같이 여러가지 일을 합니다:
- 현재 날짜 및 시간 구하기
- 문자열 ➡️ Date
- Date ➡️ 문자열
- Date 형태의 문자열 ➡️ 원하는 Date 형태의 문자열
- 파라미터를 통해 현지화 설정 가능
여기서 DateFormatter의 중요한 Instance property를 먼저 확인할 건데요. 바로 dateFormat 입니다.
이 프로퍼티에 변환할 혹은 변환될 포맷을 넣어줘야 합니다. 타입은 String으로 어떤 포맷인지 문자열로 넣어줘야 합니다. 아래 예시들을 보면 더 확실하게 알 수 있습니답.
그럼 이제 위의 기능들을 하나씩 훑어보도록 하겠습니다.
1. 현재 날짜 및 시간 구하기 + 문자열로 표출하기
Date()를 선언하면 바로 현재 날짜 및 시간을 알 수 있습니다!
이때 얻은 값은 년-월-일 시:분:초 인데 이를 내가 원하는 형태로 변환해서 사용하면 됩니다.
만약 여기서 현재 날짜를 문자열로 바꾸고 싶다면 DateFormatter()를 통해 아래와 같이 하면 됩니다.
2. Date 형태 ➡️ String 형태
DateFormatter에는 string(from:) 라는 Instance method가 있습니다. 이를 사용해서 Date를 String으로 변환해줄 수 있습니다.
func string(from date: Date) -> String
위에서 말한 Instance property, dateFormat을 사용하는 걸 알 수 있는데, 이는 이 Date를 어떤 포맷(형태)의 문자열로 변환해줄 건지 설정해줍니다. 마지막 예제를 보면 dateFormat에 "yyyy-MM-dd"를 넣어줬는데 이는 now에 넣은 현재 시간 Date 값을 저 포맷으로 변환한다는 것을 말합니다! 다시 말해 Date를 DateFormatter의 dateFormatter 형식에 맞게 String으로 변환해준다는 것!
3. String 형태 ➡️ Date 형태
이번에는 반대로 변환해보도록 하겠습니다. String을 Date로 변환해줄건데, 여기서 String은 당연히 Date 형식의 String이겠져?
아까는 string으로 변환해주니까 .string(from:) 이었으니 Date로 변환해주니까 .date(from:) 메소드가 있습니다ㅎ
func date(from string: String) -> Date?
String 형태를 Date? 형태로 변환합니다. 왜 옵셔널일까?? String의 포맷과 제대로 매칭되지 않는다면 return nil 하기 때문입니다.
string(from:)의 경우 dateFormat에 들어가는 문자열은 이 문자열로 변환해줘!의 포맷이었다면
↔️ data(from:)의 경우엔 dateFormat에 들어갈 문자열 포맷은 이 문자열은 현재 이런 포맷이야!라는 것을 알려줍니다.
그러므로 dateFormat에는 변환해줄 String의 현재 포맷을 적어야 합니다.
위의 코드처럼 stringDate의 형식인 “년 월 일 시:분:초”의 포맷을 dateFormat에 알려줍니다. Date로 바꿀 String의 형태가 지금 이렇다~ 라는 것을 알려주는 겁니다.
그런데 여기서 아직 공부하지 않은 부분이 나오는데요. 바로 바로 timeZone~
만약 TimeZone을 지정해주지 않으면 내가 원하는 시간 값이 아닌 다른 시간 값이 나옵니다;; 정확한 시간을 보기 위해서는 UTC 시간대로 지정해줘야 하는데요. 더 자세한 설명은 TimeZone 포스팅에서 하도록 하겠습니당구장
4. Date 형식의 문자열 → 원하는 형태로 변형시키기!
이게 무슨 뜻이냐면,, String을 Date로 바꾸는게 아니라 내가 원하는 형태의 String으로 바꾸고 싶을 때를 말하는 것입니다.
예를 들어 서버에서 시간 값이 “1450” 이렇게 내려왔습니다. 그런데 이것을 오전/오후를 나타내는 12시간제로 나타내고 싶을 수 있죠? 이와 같이 Date 형식의 문자열(1450)를 원하는 형태(오후 2시 50분)로 변형시키고 싶을 때를 말하는 것입니다. 이 경우, DateFormatter를 사용해서 바로 String → String 변환이 아닌! 중간에 Date로 변환하는 방식인 String → Date → String 순서로 진행해야 합니다.
위에서 배운 메소드를 순서대로 date(from:) > string(from:) 호출하면 됩니다.
1. String ➡️ Date 변환
여기서 dateFormat은 문자열의 현재 포맷을 넣어줍니다. DateFormatter가 알 수 있도록!!
2. Date ➡️ String 변환
dateFormat은 원하는 문자열의 포맷을 넣어줍니다. 이렇게 변환해줘 DateFormatter야!!
생각보다 쉽죠?? 이렇게 열심히 적어보니 잊어버리진 않을 거 같네요... 그럼 마지막으로 DateFormatter의 Fomula를 정리해보겠습니다.
5. DateFormatter's FOMULA
여기서 끝이 아닙니다! Locale, TimeZone과 같은 속성들이 더 남아있는데요...
그건 다음 시간에 알아보겠습니다^-^ 그럼 모두들 행복한 Swift 하시길 ~ 🍀
'Swift' 카테고리의 다른 글
[Swift] 고차 함수를 알아보자! (1) | 2023.11.25 |
---|---|
Value Type vs Reference Type (1) | 2022.12.30 |
[Swift] 10진수 ↔ 2진수 변환하기 (0) | 2022.12.27 |
[Swift] 문자열과 문자(Strings & Characters) (2/2) (0) | 2022.02.13 |
[Swift] 문자열과 문자(Strings & Characters) (1/2) (0) | 2022.02.13 |