본문 바로가기
공부/스위프트

[스위프트] 날짜와 문자열 간 변환(Date <-> String)

by 초코팅촉 2024. 5. 9.
728x90

이번에는 생각보다 꽤 많이 쓰는 경우인 Date 와 String간의 변환을 알아봅시다.

이게 목데이터를 만들어서 쓸때 날짜가 들어가야 되는경우엔 아무래도 날짜를 내 맘대로 지정해서 넣는게 편하잖아요?

그래서 필수적으로 들어가야된다고 보시면 되기때문에 아주 쓸모가 많습니다.

 

String -> Date

우선 날짜형식으로 된 문자열을 Date로 만들어 봅시다.

import Foundation

let dateString: String = "2024-05-09 12:34:32"

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone?

let date:Date = dateFormatter.date(from: dateString)!

print(type(of: date))	// Date
print(date)		// 2024-05-09 12:34:32 +0000

1. String형이며 원하는 날짜를 지정해준 dateString 변수 생성

2. DateFormatter 인스턴스 생성

3. 임의로 만든 dateString 변수의 날짜 형식에 맞춰서 dateFormat 지정

4. 8번 줄의 timeZone은 있어도 되고 없어도 됩니다. 대신 있으면 현재 타임존에 맞춰서 시간을 바꿔주겠죠?

5. date() 메서드는 Date?를 반환하기 때문에 언래핑 해주고 변수에 담아서 사용합니다.

 

응용버전

import Foundation

let dateString: String = "2024-05-09"

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.timeZone = TimeZone(identifier: "UTC")

let date:Date = dateFormatter.date(from: dateString)!

print(type(of: date))	// Date
print(date)		// 2024-05-09 00:00:00 +0000

바뀐부분이 있다면 1번과 3번인데요,

첫번째 예시처럼 전부 적을 필요없이 그냥 필요한 부분만 저렇게 각각 맞춰서 써주면 날짜만도 뽑아낼 수 있습니다!

 

Date -> String

날짜를 문자열로 뽑아내는 방법을 알아봅시다. 이건 뭐 너무 흔하게 알려져있죠?

import Foundation

let date:Date = Date()

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let dateString = dateFormatter.string(from: date)

print(dateString)		// 2024-05-09 12:34:32

1. 현재 날짜를(경우에 따라 이미 존재하는 날짜 데이터를) 인스턴스화 합니다.

2. DateFormatter 인스턴스 생성

3. 원하는 날짜 형식 지정

4. 변수에 담아서 사용.

 

extension

위의 방법들을 String과 Date에 extension으로 담아서 사용하면 매우 편리하겠죠? 해봅시다!

String to Date

extension String {
    func toDate() -> Date? {
        let df = DateFormatter()
        df.dateFormat = "yyyy-MM-dd HH:mm:ss"
        df.timeZone = TimeZone(identifier: "UTC")
        
        if let date = df.date(from: self) {
            return date
        } else {
            return nil
        }
    
    }
}

옵셔널 언래핑을 했기때문에 반환된 date는 원래라면 그냥 Date값이지만

df.date()메서드에서의 반환값이 옵셔널이라 nil이 나올경우도 처리해줘야 해서 Date?로 반환합니다.

 

Date to String

extension Date {
    func toString() -> String {
        let df = DateFormatter()
        df.dateFormat = "yyyy-MM-dd HH:mm:ss"
        df.timeZone = TimeZone(identifier: "UTC")
        return df.string(from: self)
    }
}

 

 

 

 

swift - date to string, string to date