Date
UTC (Coordinated Universal Time)
κ΅μ μ μΈ νμ€ μκ° - νμ μΈκ³μ
κΈ°μ‘΄ νκ· νμμμΈ κ·Έλ¦¬λμΉ νμ€μ(GMT)λ₯Ό λ체 νμ¬ μ¬μ©νλ€.
μΌλ°μ μΌλ‘ GMT μκ°κ³Ό UTC μκ°μ νΌμ©ν΄μ μ¬μ©νλ€.
μκ΅, λ°λμ 그리λμΉ μ²λ¬Έλμ μκ°μ κΈ°μ€μΌλ‘ νλ μκ°
μμ
μ°λ¦¬λλΌ: UTC + 9 (μκ΅μ κΈ°μ€μΌλ‘ 9μκ° μμ λ€)
λ΄μ : UTC - 5 (5μκ° λ리λ€.)
μν κ° λμ λλΌλ μ¬λ¬κ°μ νμ€μλ₯Ό μ¬μ©νλ€. (μ€κ΅μ 1κ°)
Date ꡬ쑰체
π‘ Swiftμμ κΈ°λ³ΈμΌλ‘ μ 곡νλ λ μ§λ₯Ό λ€λ£¨λ ꡬ쑰체μ΄λ€.
Date()
: νμ¬ μμ μ Date μΈμ€ν΄μ€κ° μμ±λλ€.
κΈ°μ€ μμ (reference data, 2001.01.01 00:00:00 UTC)μμ λͺ μ΄κ° λ¨μ΄μ Έμλμ§λ₯Ό κ³μ°νλ€.
.timeIntervalSinceReferenceDate
TimeInterval
Type, μ΄ λ¨μμ κ°λ
μ΄λ€.
μλ ₯, μλ ₯ λ± νμ μ‘΄μ μν₯μ λ°μ§ μλ λ
립μ μΈ μκ°μ κ°μ΄λ€.
μμμ μΈ λ μ§μ μκ°μΌλ‘ ꡬμ±λμ΄μλ€.
λ¬λ ₯, νμμ‘΄ (μ§μ)μ λ³ννμ¬ μ¬μ©ν΄μΌνλ€.
νμν κ²½μ° μ μ ν νμμ λ¬Έμμ΄ νμ
μΌλ‘ λ³νν΄μ μ¬μ©ν μ μλ€.
Copy let now - Date() // μμ± μμ μ λ μ§μ μκ° (μ΄ λ¨μ)
print(now) // UTC κΈ°μ€μ μκ° μΆλ ₯
now.timeIntervalSinceReferenceDate
Calendar
Dateμ μ€μ νμ© λ°©λ²
μλ ₯, μλ ₯μ λ¬λ ₯μ λ€λ£¨λ Calendar ꡬ쑰체 νμ©
μνλ νμμ λ¬Έμμ΄λ‘ λ³ννκΈ° μν DateFormatter ν΄λμ€ νμ©
Calendarꡬ쑰체
μ λμμ Dateλ₯Ό μ°λ/μ°λ/λ μ§/μμΌ λ±μ λ¬λ ₯μ μμλ‘ λ³νμ λμμ€λ€.
Calendar.current
κ·Έλ κ³ λ¦¬λ ₯(Gregorian calendar: μλ ₯)
Calendar.autoupdatingCurrent
μ μ κ° μ νν λ¬λ ₯ κΈ°μ€ (μΈκ³μ μλΉμ€)
μ§μ μ€μ
λλΌλ§λ€ λ μ§μ μκ°μ νκΈ°νλ νμκ³Ό μΈμ΄κ° λ€λ¦
Copy var calendar = Calendar.current
// λ¬λ ₯μ μ§μ, λ¬λ ₯ νκΈ° λ°©λ²
calendar.locale
// timezone, UTC μκ°κ³Ό κ΄λ ¨λ κ°λ
calendar.timeZone
calendar.locale = Locale(identifier: "ko_KR")
Dateμ λ
/μ/μΌ/μ/λΆ/μ΄ νμΈ
Copy // 1) λ μ§ - λ
/ μ / μΌ
let year: Int = calendar.component(.year, from: now)
let month: Int = calendar.component(.month, from: now)
let day: Int = calendar.component(.day, from: now)
// 2) μκ° - μ / λΆ / μ΄
let timeHour: Int = calendar.component(.hour, from: now)
let timeMinute: Int = calendar.component(.minute, from: now)
let timeSecond: Int = calendar.component(.second, from: now)
// μμΌ
let weekday: Int = calendar.component(.weekday, from: now) // μΌ: 1, μ: 2..
π‘ μ€μ μ±μμ νκΈ°ν λ, μμ²λΌ λΆλ¦¬νμ¬ Labelμ νμνλ€.
Copy let myCal = Calendar.current
var myDateCom = myCal.dateComponents([.year, .month, .day], from: now)
//myCal.dateComponents(<#T##components: Set<Calendar.Component>##Set<Calendar.Component>#>, from: <#T##Date#>)
myDateCom.year
myDateCom.month
myDateCom.day
print("\(myDateCom.year!)λ
\(myDateCom.month!)μ \(myDateCom.day!)μΌ")
μμ
λ¬λ ₯μ κΈ°μ€μΌλ‘ λμ΄ κ³μ°
Copy class Dog {
var name: String
var yearOfBirth: Int
init(name: String, year: Int) {
self.name = name
self.yearOfBirth = year
}
// λμ΄λ₯Ό κ³μ°νλ κ³μ° μμ±
var age: Int {
get {
let now = Date()
let year = Calendar.current.component(.year, from: now)
return year - yearOfBirth
}
}
}
let choco = Dog(name: "μ΄μ½", year: 2015)
choco.age
μ΄κ±°νμΌλ‘ μ©λ¦¬μ λ§λ€κ³ , μ€λμ μμΌ κ³μ°
Copy enum Weekday: Int {
case sunday = 1, monday, tuesday, wednesday, thursday, friday, saturday
static var today: Weekday {
let weekday: Int = Calendar.current.component(.weekday, from: Date())
return Weekday(rawValue: weekday)!
}
}
// μ€λμ΄ λ¬΄μ¨μμΌμΈμ§
let today = Weekday.today
λ λ μ§ μ¬μ΄μ μΌ μ κ³μ°
Copy let startDate = Date()
let endDate = startDate.addingTimeInterval(3600 * 24 * 60) // 60μΌ ν
let calendar2 = Calendar.current
let someDays = calendar2.dateComponents([.day], from: startDate, to: endDate).day!
print("\(someDays)μΌ ν")
π‘ λ μ§μ μκ°μ μνλ νμμ λ¬Έμμ΄λ‘ λ³ννλ λ°©λ²μ μ 곡νλ ν΄λμ€μ΄λ€. RFC 3339 νμ€μΌλ‘ μμ±λμλ€. Dateλ₯Ό νΉμ νμμ λ¬Έμμ΄λ‘ λ³ννκΈ° μν΄μλ **μ§μ, μκ°λ, λ μ§νμ, μκ°νμ**μ μ§μ ν΄μΌνλ€.
κΈ°λ³Έμ μΈ μ¬μ© λ°©λ²
Copy let formatter = DateFormatter()
// 1. μ§μ μ€μ
formatter.locale = Locale(identifier: "ko_KR")
// 2. μκ°λ μ€μ , default κ° μ‘΄μ¬
formatter.timeZone = TimeZone.current
// 3. λ μ§ νμ μ€μ
formatter.dateStyle = .full // "Tuesday, April 13, 2021"
//formatter.dateStyle = .long // "April 13, 2021"
//formatter.dateStyle = .medium // "Apr 13, 2021"
//formatter.dateStyle = .none // (λ μ§ μμ΄μ§)
//formatter.dateStyle = .short // "4/13/21"
// 4. μκ° νμ μ ν
formatter.timeStyle = .full // "2:53:12 PM Korean Standard Time"
//formatter.timeStyle = .long // "2:54:52 PM GMT+9"
//formatter.timeStyle = .medium // "2:55:12 PM"
//formatter.timeStyle = .none // (μκ° μμ΄μ§)
//formatter.timeStyle = .short // "2:55 PM"
// μ¬μ©
let timeString = formatter.string(from: Date())
print(timeString)
컀μ€ν
νμμΌλ‘ μμ±
Copy let formatter = DateFormatter()
formatter.locale = Locale(identifier: "ko_KR")
formatter.dateFormat = "yyyyλ
MMMM dμΌ(E)"
let timeString = formatter.string(from: Date())
λ¬Έμμ΄μμ Dateλ‘ λ³ν
Copy let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
let date = newFormatter.date(from: "2023/01/01)
print(date) // Date νμ
λ λ μ§ μ¬μ΄μ μ°¨μ΄
Copy let start = Date()
let end = start.addingTimeInterval(3600 * 24 * 60) // 60μΌ ν
let formatter DateFormatter()
formatter.locale = Locale(identifier: "ko_KR")
formatter.timeZone = TimeZone.current
// formatter.timeZone = TimeZone(identifier: "Asiz/Seoul")
formatter.dateStyle = .long
formatter.timeStyle = .none
print("κΈ°κ°: \(formatter.string(from: start)) - \(formatter.string(from: end))")
Date Component
DateComponents
λ μ§μ μκ°μ μμλ€μ λ€λ£° μ μλ ꡬ쑰체
μνλ νΉμ λ μ§, μκ°μ μμ±ν μ μλ€.
Copy var components = DateComponents()
components.year = 2021
components.month = 1
components.day = 1
components.hour = 12
components.minute = 30
components.second = 0
let specifiedDate: Date = Calendar.current.date(fromt: components)!
Copy // ꡬ쑰체μ νμ₯
extension Date {
init?(y year: Int, m month: Int, d day: Int) {
var components = DateComponents()
components.year = year
components.month = month
componetns.day = day
guard let date = Calendar.curretn.date(from: components) else {
return nil // μ€ν¨κ°λ₯μμ±μκ° νμν μ΄μ
}
self = date // ꡬ쑰체μ΄κΈ°λλ¬Έμ selfμ μλ‘μ΄ μΈμ€ν΄μ€ ν λΉ λ°©μμΌλ‘ μ΄κΈ°ν κ°λ₯
// νμ λ§λ€μ§ μκΈ° λλ¬Έμ κ°λ₯ self vs Self λΉκ΅
}
}
datecomponents
μ λμ μμ (μ΄κΈ°μ€)μ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλ€.
μνλ λ μ§, μκ°μΌλ‘ μΈν
νλ λ°©λ²μ΄λ€.
μ§μμ μΌλ‘ μ¬μ©νλ ꡬν
κ³μ μ¬μ©νκ² λ μ½λλ μ±κ²©μ νμ
ν΄μ μμ±μ΄λ λ©μλ λ±μΌλ‘ ꡬνν΄μ μ½λμ λ£λλ€.
μ€μ λ‘λ κ³μ° μμ±(보νΈμ ), νμ
λ©μλ, μ
μ±μ, μλΈμ€ν¬λ¦½νΈ λ±μΌλ‘ ꡬννλ€.