본문 바로가기

code snippet

[Swift] DateFormatter - ISO8601

DateFormatter를 사용하면 Date와 String(문자열) 간 변환을 할 수 있다.

DateFormatter의 dateStyle이나 timeStyle의 값을 이용해서 미리 정해진 형식을 설정할 수 있다.

하지만 대부분의 경우 원하는 형식과 달라서 dateFormat 으로 커스텀하게 설정하는 경우가 많다.

let formatter = DateFormatter()
formatter.dateFormat = "yyyy.MM.dd"

formatter.string(from: Date())
// 2022.12.01

날짜 형식 중에 2023-01-31T09:00:00.000Z 와 같은 형식을 사용하는 경우를 종종 만나게 된다. 그런 경우 dataFormat 설정을 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 설정해서 다룰 수 있다.

let formatter2 = DateFormatter()
formatter2.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

formatter2.string(from: Date())
// 2022-12-01T23:07:59.004Z

 

ISO8601DateFormatter

이런 방식의 날짜 표현을 ISO8601 이라는 날짜 표준 이라고 한다. 이런 형식을 다루는 날짜 포매터로 ISO8601DateFormatter가 있다.

다음과 같이 ISO8601DateFormatter를 생성하고 문자열 포맷을 비교하면 밀리 초를 제외하면 비슷하게 동작하는 것을 알 수 있다.

let formatter3 = ISO8601DateFormatter()

formatter3.string(from: Date())
// 2022-12-01T13:57:05Z

ISO8601DateFormatter의 형식을 커스터마이징 하려면 formatOptions를 설정한다. 초 이하의 시간까지 다루려면 .withFractionalSeconds 가 필요하다.

formatter3.formatOptions = [.withFullDate, .withFullTime, .withFractionalSeconds]

formatter3.string(from: Date())
// 2022-12-01T14:00:35.768Z

 

반응형