RFC 3339 날짜 포맷
2020–08–28T09:20:26.187+09:00
이런 포맷으로 로그에 시간을 남기고 싶다. 이런 포맷이란?
RFC 3339 표준이다. RFC 3339는 인터넷 프로토콜을 위한 ISO 8601 표준의 프로파일로써 그레고리안 달력을 사용하고, 24시간제이며, UTC를 기준으로 한다.
다음과 같이 DateFormatter를 사용해서 구현하면 아이폰 설정의 locale, calendar, 24시간제 등을 따르게 되고 원하는 결과가 안 나올 수 있다.
(참고. https://developer.apple.com/library/archive/qa/qa1480/_index.html)
let formatter = DateFormatter()
formatter.locale = .current
formatter.timeZone = .current
formatter.dateFormat = “yyyy-MM-dd’T’HH:mm:ss.SSSXXX”
let time = formatter.string(from: self)
// 그레고리안 설정 사용
// time: 2020–08–28T09:20:26.187+09:00
// 불기 설정 사용
// time: 2563–08–28T09:21:44.439+09:00
// 일본 연호 설정 사용
// time: 0002–08–28T09:22:30.837+09:00
그러나 ISO8601DateFormatter을 사용하면 다음과 같이 원하는 결과가 나온다.
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [ISO8601DateFormatter.Options.withInternetDateTime, ISO8601DateFormatter.Options.withFractionalSeconds]
formatter.timeZone = .current
let time = formatter.string(from: self)
// 그레고리안 설정 사용, san francisco
// time: 2020–08–27T17:48:33.013–07:00
// 불기 설정 사용, san francisco
// time: 2020–08–27T17:50:31.669–07:00
// 일본 연호 설정 사용, 서울
// time: 2020–08–28T09:52:27.330+09:00
참고
- https://developer.apple.com/documentation/foundation/dateformatter
- https://developer.apple.com/documentation/foundation/iso8601dateformatter
- https://developer.apple.com/documentation/foundation/iso8601dateformatter/options/1643217-withinternetdatetime
- https://developer.apple.com/library/archive/qa/qa1480/_index.html
- https://ko.wikipedia.org/wiki/ISO_8601
- https://ko.wikipedia.org/wiki/일본의_연호
- https://ko.wikipedia.org/wiki/로케일