๋ค์ด๊ฐ๋ฉฐ
์๋
ํ์ธ์, ํ๋ผ์
๋๋ค :) ์ ๋ง ์ค๋๋ง์ ๊ธ์ ์๋๋ค..๐ ์์ ๋ฒ์์์ด ์ฌ ๊ฒ๋ง ๊ฐ์์ ์์ฌ์์ฌ ํ๋ฃจ๋ฅผ ๋ณด๋ด๊ณ ์์ง๋ง ๋ค์๊ธ ๋ง์์ ๋ค์ก๊ณ ์ด์ฌํ ํด๋ณด๊ณ ์ ํฉ๋๋ค. ๊ธ ์ฐ๋ ๊ฒ์ ์๊ฐ๋ณด๋ค ๋๋ฌด ๋ฏธ๋ค๋๊ณ ์์๋๋ฐ, ์๋ฒฝ์ ์ถ๊ตฌํ๊ธฐ ๋ณด๋ค๋ ์ผ๋จ ์ค์ฒ์ ํ๋ ๊ฒ์ ์ต๊ด์ ๋ค์ด๋๋ก ๋
ธ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค.
์ค๋ ๊ฐ๋จํ๊ฒ ์๊ฐํ ๋ด์ฉ์์. ์ ๊ฐ ๋ ์ง ํ์์ ๊ด๋ จํด์ ์ฌ์ฉํ๋ ์ฝ๋ ์กฐ๊ฐ์ด๋ผ๊ณ ํ๋ฉด ๋ ๊น์. ๋ฃ๊ณ ์๋ ์์
์์๋ ๋ ์ง๋ฅผ ๋ค๋ค๋ณผ ์ผ์ด ์์๊ณ , ์งํ ์ค์ธ ํ๋ก์ ํธ ๋ด์์๋ ์ ๊ฐ ์บ๋ฆฐ๋๋ฅผ ๋งก๊ณ ์์ด์ ๋ ์ง๋ฅผ ๋ค๋ฃฐ ์ผ์ด ๋ง์๋ฐ์. ์๊ฐ๋ณด๋ค ๋ ์ง ํ์์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌด ๊ท์ฐฎ์ต๋๋ค. ๊ทธ๋์ ์ด๊ฑฐํ์ ์ด์ฉํด์ ์ข ๋ ๊น๋ํ๊ฒ DateFormat์ ๊ด๋ฆฌํด๋ณด๋๋ก ํด์.
์ฐ๋ฆฌ๊ฐ ๊ทธ๋์ ๋ ์ง๋ฅผ ๋ค๋ฃจ๋ฉด์ ํ๋ ํ๋์ ๋์ด์ผ๋ณผ๊ฒ์. Date ํ์
์ String ํ์
์ผ๋ก ๋ณํํ๊ฑฐ๋, String ํ์
์ Date ํ์
์ผ๋ก ๋ณํํ๋ ๋ฑ 2๊ฐ์ง์ ๋ชจ์ต์ ํ์ธํ ์ ์์ด์. ๋งค๋ฒ ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ด๋ค ์์ผ๋ก ์์ฑํ์๊น์?
๊ธฐ์กด ๋ ์ง ๋ณํ ๋ฐฉ์
1. Date์ String์ผ๋ก ๋ฐ๊พธ๊ธฐ
์ํ๋ ํํ์ ํฌ๋งท ์ด๋ค ๊ฒ์ผ๋ก๋ ๋ณํ์ด ๊ฐ๋ฅํฉ๋๋ค.
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "ko_KR")
dateFormatter.dateFormat = "yyyy-MM-dd"
let newDate = Date()
return dateFormatter.string(from: newDate)
2. String์ Date๋ก ๋ฐ๊พธ๊ธฐ
String์ ํฌ๋งท๊ณผ dateFormatter์ dateFormat ํ์ ์ ํฌ๋งท์ ๋ง์ถฐ์ฃผ์ด์ผ ํฉ๋๋ค.
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "ko_KR")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
let dateString = "2022-08-08 22:30"
return dateFormatter.date(from: dateString)
์์ 1๋ฒ, 2๋ฒ์ ์ ์ ํ ์ ์์ผ๋ฉด String ํํ์ Date๋ฅผ ์ํ๋ ํฌ๋งท์ String์ผ๋ก ๋ค์ ๋ฐ๊ฟ์ค ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์๊ฐํด๋ณด๋ฉด ์์ ์์
์ด ์๋นํ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ๋ ์ง ํ์์ ๋ฐ๊พธ๋ ค๋ฉด ๋งค ์๊ฐ๋ง๋ค DateFormatter ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ (๋ฌผ๋ก Class๋ Struct ๋ด์์ ํ ๋ฒ๋ง ๋ง๋ค์ด๋๊ณ ์ฌ์ฉํด๋ ๋ฉ๋๋ค.) dateFormat์ ์ง์ ํด์ฃผ๊ณ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๊ณ ์ฌ๊ฐ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด ์๋ ์ ์์ฃ . ์์ ๋จ์ ์ธ์๋ ํ๋ก์ ํธ ๋ด์์ ์ฌ๋ฌ ํํ์ ๋ ์ง ํ์์ด ์ฐ์ด๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๊ณณ๊ณณ์ ํฉ์ด์ง ๋ ์ง ํ์์ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ง์น ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ด ๊ณณ๊ณณ์ ํผ์ ธ์๋ ๋๋๊ณผ๋ ๋น์ทํ์ฃ . ๊ทธ๋์ ์ด๊ฑฐํ์ ์ด์ฉํด์ ์ข ๋ ์ฝ๊ฒ ๋ ์ง ํ์์ ๊ด๋ฆฌํ๊ณ , Date์ String์ Extension ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฝ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ํฉ๋๋ค.
์ด๊ฑฐํ๊ณผ Extension์ ์ด์ฉํ ์ฝ๋ ๊ฐ์
1. DateFormatType ์ด๊ฑฐํ ์์ฑ
enum DateFormatType {
case full
case year
case utc
case utcWithSlash
var description: String {
switch self {
case .full:
return "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
case .year:
return "yyyy-MM-dd"
case .utc:
return "MM-dd-yyyy"
case .utcWithSlash:
return "MM/dd/yyyy"
}
}
}
์ด description ํ๋กํผํฐ์ ๋ค์ด์๋ String ๊ฐ์ด ๊ฒฐ๊ตญ dateFormatter์ dateFormat ํ์์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋ ๊ฒ์ธ๋ฐ์. ์ด๋ ๊ฒ ์ด๊ฑฐํ์ผ๋ก ํ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๊ฒ ๋๋ฉด ํ๋ก์ ํธ ๋ด์์ ์ฐ์ด๋ dateFormat์ ์ข ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ์ฃ ?
2. Date+Extension
import UIKit
extension Date {
func toString(of type: DateFormatType) -> String {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "ko_KR")
dateFormatter.dateFormat = type.description
return dateFormatter.string(from: self)
}
}
3. String+Extension
import UIKit
extension String {
func toDate(to type: DateFormatType) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "ko_KR")
dateFormatter.dateFormat = type.description
return dateFormatter.date(from: self)
}
}
์ค์ ์ฝ๋ ์ ์ฉ
์ผ์ชฝ์ ์๋ ๋ ์ง ํ์(yyyy-MM-dd)๋ฅผ ์ค๋ฅธ์ชฝ์ ์๋ ๊ฒ์ฒ๋ผ ๋ฏธ๊ตญ์ ํ๊ธฐ(MM/dd/yyyy)๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๊ฒ์ธ๋ฐ์. ๊ธฐ์กด ๋ฐฉ์์ ์ด์ฉํด์๋ ์ ๋ฐ๊ฟ ์ ์๊ฒ ์ง๋ง ์์์ ์๊ฐํ ์ด๊ฑฐํ๊ณผ Extension์ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์ธ ์ ์์ต๋๋ค.
// media.releaseDate๋ "2022-08-22" ๋ค์๊ณผ ๊ฐ์ ํ์์ ๋ฐ
dateLabel.text = media.releaseDate
// 08/22/2022์ ๊ฐ์ด ๋ ์ง ํ์์ ๋ณ๊ฒฝํ ์ ์์
dateLabel.text = media.releaseDate.toDate(to: .year)?.toString(of: .utcWithSlash)
๊ธฐ์กด ๋ ์ง ๋ณํ ๋ฐฉ์์ ์ด์ฉํ๋ค๋ฉด ์ค๋ณต๋ ์ฝ๋๋ ๋ง์ด ์ฐ๊ณ , ๋๋ฌด ๋จธ๋ฆฌ ์ํ ์ ๊ฒ ๊ฐ์๋ฐ ์ฝ๋๊ฐ ์ ๊ฐ์ ๋ ๊ฒ ๊ฐ๋์? ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๊ธฐ๋ณธ ๊ฐ๋
๋ค์ ์ด์ฉํด์ ์ฝ๋๋ฅผ ๊ฐ์ ํด๋ณด์์ต๋๋ค. ์ข์ ์๊ฐ์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ง์น๋ฉฐ
์ถ๊ฐ๋ก ์ด๋ ๊ฒ ๋ ์ง ํ์์ ๋ค์ํ๊ฒ ํํํ ์ ์๋ค๋ ๊ฒ์ ์๋ฆฌ๋ฉฐ ๋ง์นฉ๋๋ค. (์กฐ๊ธ๋ง.. ์ค์ฌ์.. ํ๋ก์ ํธ์ ์ฌ์ฉํ์...)
enum FormatType {
case full
case year
case day
case month
case second
case time
case calendar
case calendarTime
case calendarWithMonth
case noticeDay
var description: String {
switch self {
case .full:
return "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
case .year:
return "yyyy-MM-dd"
case .day:
return "M์ d์ผ EEEE"
case .month:
return "M์"
case .second:
return "HH:mm:ss"
case .time:
return "a h:mm"
case .calendar:
return "yyyy๋
MM์ dd์ผ"
case .calendarTime:
return "a HH:mm"
case .calendarWithMonth:
return "yyyy๋
M์"
case .noticeDay:
return "yyyy.MM.dd"
}
}
}
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
UIButton.Configuration์ ํ์ฅํด์ ์ฌ์ฉํด๋ณด์ (0) | 2022.08.15 |
---|---|
[WWDC19] Introducing Combine (0) | 2022.08.10 |
ํ์ ์ถ๋ก ๊ณผ ํ์ ์ด๋ ธํ ์ด์ ์ ์๋ ์ฐจ์ด์ ๊ดํ์ฌ(๐ง ํ์ ์ถ๋ก ์ด ๋ ๋น ๋ฅด๋ค?) (2) | 2022.08.02 |
[WWDC21] SheetViewController (Session. Customize and resize sheets in UIKit) (0) | 2022.08.02 |
Enum์ ํ์ฉํด TableViewController ๊ตฌ์ฑํ๊ธฐ (1) | 2022.07.19 |