Swift에서 DateFormatter를 사용하여 사용자 로케일의 날짜 형식 지정

4504 단어 iosswift
날짜 작업은 어렵습니다. 의심의 여지가 없습니다. 그리고 앱의 모든 사용자에 대해 날짜 형식을 올바르게 지정하는 것이 더 쉬운 일이 아닙니다(모든 작업을 수동으로 수행하려는 경우). 다행히도 시스템이 우리를 도울 수 있습니다.

예를 들어, 미국에서는 "October 15"라고 쓰고 네덜란드에서는 15 oktober라고 씁니다.

날짜와 월의 순서가 다르고 월의 철자가 다르며 대문자도 다릅니다.

iOS의 DateFormatter가 이 많은 작업을 처리합니다. 예를 들어 nl를 로케일로 사용하는 장치에서 다음 코드를 사용하는 경우 이 스니펫에 주석으로 추가한 출력이 표시됩니다.

let now = Date()
let formatter = DateFormatter()
formatter.dateFormat = "dd MMMM"
formatter.string(from: now) // 15 oktober


이 코드의 출력은 제자리에 있습니다. 정확히 우리가 필요로 하는 것이며 지정된 날짜 형식과 완벽하게 일치합니다. en_us를 로케일로 사용하는 장치에서 동일한 코드를 실행하면 출력은 10월 15일입니다.

날짜 포맷터가 철자와 대소문자를 올바르게 지정했지만 날짜와 월의 순서가 잘못되었습니다.

날짜 포맷터에서 setLocalizedDateFormatFromTemplate를 직접 할당하는 대신 dateFormat를 사용하여 이 문제를 해결할 수 있습니다. nl를 로캘로 사용하여 장치에서 실행되는 예를 다시 살펴보겠습니다.

let now = Date()
let formatter = DateFormatter()
formatter.setLocalizedDateFormatFromTemplate("dd MMMM")
formatter.string(from: now) // 15 oktober


여전히 작동합니다. 완벽합니다. en_us 장치에서 이 코드를 실행하면 출력은 10월 15일입니다. 정확히 우리가 필요로 하는 것입니다.

Playground에서 setLocalizedDateFormatFromTemplate를 가지고 놀고 싶다면 다른 로케일에서 날짜 포맷터를 사용하는 다음 코드로 시도해 볼 수 있습니다.

import Foundation

let now = Date()
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_us")
formatter.setLocalizedDateFormatFromTemplate("dd MMMM")
formatter.string(from: now) // October 15

formatter.locale = Locale(identifier: "nl")
formatter.setLocalizedDateFormatFromTemplate("dd MMMM")
formatter.string(from: now) // 15 oktober


이 빠른 팁에 대해 질문이 있거나 다른 이유로 저에게 연락하려는 경우 주저하지 말고 에서 메시지를 보내주십시오.

Swift와 Foundation이 이러한 종류의 작업을 처리할 수 있다는 것은 좋은 일입니다.

좋은 웹페이지 즐겨찾기