날짜를 문자열로 변환 및 역변환

10422 단어 xcodeswiftiosiphone
당신은 코딩을 하고 있습니다. 모두 괜찮습니다. 새들이 지저귀고, 키가 2018 MBPro에 고정되지 않습니다...하지만 멀리서 Date()가 접근합니다. . .



농담을 제쳐두고 날짜는 대부분의 경우 작업하기가 어렵지 않습니다. 대부분의 앱에서 정확도는 그다지 중요하지 않지만, 날짜의 토끼 구멍으로 내려가면 어디에서 끝날지 알 수 없습니다.

이 비디오에서 가장 잘 말했으므로 꽤 재미 있고 좀 더 통찰력을 얻을 수 있으므로 확인하십시오.


코드에 Date()를 생성하고 인쇄하면 다음과 같은 내용이 표시됩니다 ↙️

var today = Date()
print(today)

// prints -> "2020-04-22 19:34:58 +0000"


API로 작업할 때 아마도 2020-04-22T19:34:58+0000을 얻게 될 것입니다.

긴 줄...뭔가...맞나? 그러나 두려워하지 마세요. 실제로 매우 잘 구성되어 있고 무엇을 찾아야 하는지 알고 나면 상당히 논리적입니다.

가장 일반적인 표준 또는 표준 표준은 ISO 8601이며 이것이 구성되는 방식입니다.



그리고 이제 그 모든 것이 완전히 이해됩니다. 그 Z를 제외하고. 예를 들면...Zee UTC? 🤪


그 날짜를 잡아!



이제 우리가 무엇을 보고 있는지 알았으므로 먼저 문자열 -> 날짜를 변환해야 합니다.

// Info we got from backend.
let stringDateFromAPI = "2007-01-09T09:41:00-0700"

// Creating a formatter and setting the current locale
let formatter = DateFormatter()
formatter.locale = .current

// Telling the formatter what what kind of format we are expecting.
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"

// Creating the date object
let dateFromAPI = formatter.date(from: stringDateFromAPI)

print(dateFromAPI ?? "Unknown")
// 🖨 2007-01-09 16:41:00 +0000 // But now its a date, not a string.


우리는 Date()를 모두 멋지고 깔끔하게 얻었습니다. 여기서부터 시간 형식 지정을 위한 LOADS 선택 항목이 있습니다.

.locale 설정에 .current를 사용했기 때문에 시간과 분은 현재 사용자 위치를 기반으로 합니다. 소스 시간을 사용하려면 해당 포맷터 설정을 생략하십시오.

이제 이 날짜를 다양한 방법으로 적절한 문자열로 변환할 수 있습니다. 여기서는 제가 사용하는 두 가지 주요 접근 방식을 보여 드리겠습니다.


네이티브 전환  (⌥#1)



Swift DateFormatter에는 작업을 완료할 수 있는 사전 정의된 형식이 이미 있습니다. 각각의 인쇄 출력을 살펴보십시오. 데이트 컨트롤이 많이 필요하지 않으신 분들은 편하게 이용해보세요 ⬇️

// Since dateFromAPI is an optional Date,
// I am using todays date as a default.

let nativeFormatter = DateFormatter()
nativeFormatter.locale = .current

nativeFormatter.dateStyle = .full
print(nativeFormatter.string(from: dateFromAPI ?? Date()))
// 🖨 Tuesday, January 9, 2007

nativeFormatter.dateStyle = .long
print(nativeFormatter.string(from: dateFromAPI ?? Date()))
// 🖨 January 9, 2007

nativeFormatter.dateStyle = .medium
print(nativeFormatter.string(from: dateFromAPI ?? Date()))
// 🖨 Jan 9, 2007

nativeFormatter.dateStyle = .none
print(nativeFormatter.string(from: dateFromAPI ?? Date()))
// 🖨

nativeFormatter.dateStyle = .short
print(nativeFormatter.string(from: dateFromAPI ?? Date()))
// 🖨 1/9/07



맞춤 서식 지정 🛠 (⌥#2)



보다 세분화된 제어가 필요한 경우 사용자 정의 포맷터를 생성하십시오. 이모티콘을 추가할 수도 있습니다. 🤷‍♂️

let customFormater = DateFormatter()
customFormater.locale = .current
customFormater.dateFormat = "🗓 MMM d yyyy 📲"
print(customFormater.string(from: dateFromAPI ?? Date()))
// 🗓 Jan 9 2007 📲


사용자 지정 형식을 만들 때 .dateFormat에 어떤 표기법을 사용하고 있는지 주의하십시오. 약간 뻑뻑한 느낌이 들 수 있습니다.

예를 들어 소문자 m은 분을 나타내고 대문자 M은 월을 나타냅니다. 다음은 몇 가지 예와 그 출력입니다. ⬇️



입력
산출


1월

MM
01


1


9


09

와이
2007년

yy
07

yyy
2007년

yyyy
2007년

HH:mm
17:41

hh:mm
05:41

hh:mm a
오후 05:41

이자형




이제 사용자 지정 DateFormatter를 만들기 위해 믹스 앤 매치를 사용할 수 있습니다!

당신은 더 이상 데이트를 두려워하지 않을 것입니다!


약속한 대로 다음은 프로젝트에 사용하고 대부분의 API 응답을 처리할 수 있는 String의 확장입니다.

extension String {
    func convertToReadableDate() -> String? {

        let formatter = DateFormatter()
        formatter.locale = .current

        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
        guard let dateFromAPI = formatter.date(from: self) else { return nil}

        formatter.dateFormat = "MMM d yyyy"
        return formatter.string(from: dateFromAPI)
    }
}

// Usage: 
// label.text = "someDateString".convertToReadableDate()



읽어 주셔서 감사합니다! 부담없이 연락주세요

건배! 🍻

좋은 웹페이지 즐겨찾기