ISO8601 DateFormitter: iOS(Swift)에서 날짜와 시간을 ISO8601 형식으로 처리

iOS(Swift)에서 ISO8601 형식으로 날짜/시간을 처리할 때ISO8601DateFormatter를 사용했기 때문에 요약했습니다.

ISO8601은


위키백과 참조: ISO8601
ISO8601은 날짜와 시간에 관한 국제 표준이다.
기본 형식
20180904T161400+0900
확장 형식
2018-09-04T16:14:00+09:00

ISO8601 DateFormater

  • 클래스 대신 ISO8601 형식의 날짜/시간DateFormatter1
  • 처리
  • iOS 10 이후(일부 iOS 11 이후) 사용 가능
  • 기본 RFC 3339 형식"yyyy-MM-dd'T'HH:mm:ssXXXXX"
  • 기본용법

    import Foundation
    

    Date에서 ISO8601 형식으로 변환

    let formatter = ISO8601DateFormatter()
    formatter.string(from: date)
    // 例: "2018-09-18T02:00:00Z"
    

    ISO8601에서 Date로 변환

    let formatter = ISO8601DateFormatter()
    formatter.date(from: "2018-09-18T02:00:00Z")
    

    주의 사항


    속성을 다시 설정한 후 CFDateFormatterRef 다시 생성될 수 있어 비용이 매우 높습니다.
    Please note that there can be a significant performance cost when resetting these properties. Resetting each property can result in regenerating the entire CFDateFormatterRef, which can be very expensive.

    옵션


    기본 설정은 다음과 같습니다.(각각의 설명은후술
  • .withInternetDateTime
  • .withDashSeparatorInDate
  • .withColonSeparatorInTime
  • .withColonSeparatorInTimeZone
  • ISO8601DateFormatter.OptionsOptionSet이므로 다음과 같이 추가하거나 삭제할 수 있습니다.

    옵션 추가

    let formatter = ISO8601DateFormatter()
    formatter.formatOptions.insert(.withFractionalSeconds)
    formatter.string(from: date)
    // 例: "2018-09-18T02:00:00.000Z"
    

    삭제 옵션

    let formatter = ISO8601DateFormatter()
    formatter.formatOptions.remove(.withDashSeparatorInDate)
    formatter.string(from: date)
    // 例: "20180918T02:00:00Z"
    

    시간대


    기본값은 GMT2입니다.

    시간대 변경

    let formatter = ISO8601DateFormatter()
    formatter.timeZone = TimeZone(identifier: "Asia/Tokyo")!
    formatter.string(from: date)
    // 例: "2018-09-18T11:00:00+09:00"
    

    추가:옵션 요약


    ISO8601DateFormatter.Options
    예제
    설명withYear "2018"년/①withWeekOfYear지정→YYYY3②기타→yyyywithMonth "09"월/MMwithWeekOfYear "2018W38"이니셜W + 주 번호wwithDay "18"일/①withMonth지정→ddwithWeekOfYear지정→ee③기타→DDDwithTime T02:00:00시간/HH:mm:sswithTimeZone Z , +09:00시간대/ZZZZZwithSpaceBetweenDateAndTime "2018-09-18 02:00:00Z"공간 대체 날짜 및 시간TwithDashSeparatorInDate "20180918T02:00:00Z"(삭제 시)
    날짜 구분자-withColonSeparatorInTime "2018-09-18T020000Z"(삭제 시)
    시간 구분자:withColonSeparatorInTimeZone "2018-09-18T11:00:00+0900"(삭제 시)
    시간대 구분자:withFullDate "2018-09-18"년 월 일/withYear, withMonth, 지정withDay과 동일withFullTime "02:00:00Z"시,분,초withInternetDateTime "2018-09-18T02:00:00Z"  
    RFC 3339 형식/withFullDate, withFullTime, withDashSeparatorInDate, withColonSeparatorInTime, withColonSeparatorInTimeZone와 동일withFractionalSeconds "2018-09-18T02:00:00.000Z"초의 소수부 (iOS 11 이후)

    참고 문장

  • Developers.IO: [iOS 10] ISO8601 DateFormtter 정보
  • iOS로 ISO8601 처리
  • https://developer.apple.com/documentation/foundation/dateformatter  
    위키백과 참조: 그리니치 표준시  
    http://www.unicode.org/reports/tr35/tr35-25.html#Date_Field_Symbol_Table  

    좋은 웹페이지 즐겨찾기