DateType

Date

UTC (Coordinated Universal Time)

  • ꡭ제적인 ν‘œμ€€ μ‹œκ°„ - ν˜‘μ • μ„Έκ³„μ‹œ

    • κΈ°μ‘΄ 평균 νƒœμ–‘μ‹œμΈ κ·Έλ¦¬λ‹ˆμΉ˜ ν‘œμ€€μ‹œ(GMT)λ₯Ό λŒ€μ²΄ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.

    • 일반적으둜 GMT μ‹œκ°„κ³Ό UTC μ‹œκ°„μ„ ν˜Όμš©ν•΄μ„œ μ‚¬μš©ν•œλ‹€.

    • 영ꡭ, 런던의 κ·Έλ¦¬λ‹ˆμΉ˜ μ²œλ¬ΈλŒ€μ˜ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ ν•˜λŠ” μ‹œκ°„

  • μ˜ˆμ‹œ

    • μš°λ¦¬λ‚˜λΌ: UTC + 9 (μ˜κ΅­μ„ κΈ°μ€€μœΌλ‘œ 9μ‹œκ°„ μ•žμ„ λ‹€)

    • λ‰΄μš• : UTC - 5 (5μ‹œκ°„ λŠλ¦¬λ‹€.)

    • μ˜ν† κ°€ 넓은 λ‚˜λΌλŠ” μ—¬λŸ¬κ°œμ˜ ν‘œμ€€μ‹œλ₯Ό μ‚¬μš©ν•œλ‹€. (쀑ꡭ은 1개)

      • λ―Έκ΅­(5), λŸ¬μ‹œμ•„(11)

Date ꡬ쑰체

πŸ’‘ Swiftμ—μ„œ 기본으둜 μ œκ³΅ν•˜λŠ” λ‚ μ§œλ₯Ό λ‹€λ£¨λŠ” ꡬ쑰체이닀.

  • Date() : ν˜„μž¬ μ‹œμ μ˜ Date μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœλ‹€.

    • κΈ°μ€€ μ‹œμ  (reference data, 2001.01.01 00:00:00 UTC)μ—μ„œ λͺ‡ μ΄ˆκ°€ λ–¨μ–΄μ ΈμžˆλŠ”μ§€λ₯Ό κ³„μ‚°ν•œλ‹€.

      • .timeIntervalSinceReferenceDate

      • TimeInterval Type, 초 λ‹¨μœ„μ˜ κ°œλ…μ΄λ‹€.

  • μ–‘λ ₯, 음λ ₯ λ“± νƒ€μž„ 쑴의 영ν–₯을 λ°›μ§€ μ•ŠλŠ” 독립적인 μ‹œκ°„μ˜ 값이닀.

    • μ•”μ‹œμ μΈ λ‚ μ§œμ™€ μ‹œκ°„μœΌλ‘œ κ΅¬μ„±λ˜μ–΄μžˆλ‹€.

    • 달λ ₯, νƒ€μž„μ‘΄ (μ§€μ—­)을 λ³€ν™˜ν•˜μ—¬ μ‚¬μš©ν•΄μ•Όν•œλ‹€.

    • ν•„μš”ν•œ 경우 μ μ ˆν•œ ν˜•μ‹μ˜ λ¬Έμžμ—΄ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

let now - Date() // 생성 μ‹œμ μ˜ λ‚ μ§œμ™€ μ‹œκ°„ (초 λ‹¨μœ„)
print(now) // UTC κΈ°μ€€μ˜ μ‹œκ°„ 좜λ ₯
now.timeIntervalSinceReferenceDate 

Calendar

Date의 μ‹€μ œ ν™œμš© 방법

  1. μ–‘λ ₯, 음λ ₯의 달λ ₯을 λ‹€λ£¨λŠ” Calendar ꡬ쑰체 ν™œμš©

  2. μ›ν•˜λŠ” ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ λ³€ν˜•ν•˜κΈ° μœ„ν•œ DateFormatter 클래슀 ν™œμš©

Calendarꡬ쑰체

  • μ ˆλŒ€μ‹œμ  Dateλ₯Ό μ—°λŒ€/연도/λ‚ μ§œ/μš”μΌ λ“±μ˜ 달λ ₯의 μš”μ†Œλ‘œ λ³€ν™˜μ„ 도와쀀닀.

  • Calendar.current 그레고리λ ₯(Gregorian calendar: μ–‘λ ₯)

    • Calendar.autoupdatingCurrent μœ μ €κ°€ μ„ νƒν•œ 달λ ₯ κΈ°μ€€ (세계적 μ„œλΉ„μŠ€)

  • μ§€μ—­ μ„€μ •

    • λ‚˜λΌλ§ˆλ‹€ λ‚ μ§œμ™€ μ‹œκ°„μ„ ν‘œκΈ°ν•˜λŠ” ν˜•μ‹κ³Ό μ–Έμ–΄κ°€ 닀름

    var calendar = Calendar.current
    
    // 달λ ₯의 μ§€μ—­, 달λ ₯ ν‘œκΈ° 방법
    calendar.locale
    
    // timezone, UTC μ‹œκ°„κ³Ό κ΄€λ ¨λœ κ°œλ…
    calendar.timeZone
    
    calendar.locale = Locale(identifier: "ko_KR")

Date의 λ…„/μ›”/일/μ‹œ/λΆ„/초 확인

// 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에 ν‘œμ‹œν•œλ‹€.

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!)일")

μ˜ˆμ‹œ

  1. 달λ ₯을 κΈ°μ€€μœΌλ‘œ λ‚˜μ΄ 계산

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
  1. μ—΄κ±°ν˜•μœΌλ‘œ μš©λ¦¬μ„ λ§Œλ“€κ³ , 였늘의 μš”μΌ 계산

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
  1. 두 λ‚ μ§œ μ‚¬μ΄μ˜ 일 수 계산

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)일 ν›„")

DateFormatter

Date Formatter

πŸ’‘ λ‚ μ§œμ™€ μ‹œκ°„μ„ μ›ν•˜λŠ” ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜λŠ” 방법을 μ œκ³΅ν•˜λŠ” ν΄λž˜μŠ€μ΄λ‹€. RFC 3339 ν‘œμ€€μœΌλ‘œ μž‘μ„±λ˜μ—ˆλ‹€. Dateλ₯Ό νŠΉμ • ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” **μ§€μ—­, μ‹œκ°„λŒ€, λ‚ μ§œν˜•μ‹, μ‹œκ°„ν˜•μ‹**을 μ§€μ •ν•΄μ•Όν•œλ‹€.

기본적인 μ‚¬μš© 방법

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)

μ»€μŠ€ν…€ ν˜•μ‹μœΌλ‘œ 생성

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "ko_KR")
formatter.dateFormat = "yyyyλ…„ MMMM d일(E)"

let timeString = formatter.string(from: Date())

λ¬Έμžμ—΄μ—μ„œ Date둜 λ³€ν™˜

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"

let date = newFormatter.date(from: "2023/01/01)
print(date) // Date ν˜•μ‹

두 λ‚ μ§œ μ‚¬μ΄μ˜ 차이

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

  • λ‚ μ§œμ™€ μ‹œκ°„μ˜ μš”μ†Œλ“€μ„ λ‹€λ£° 수 μžˆλŠ” ꡬ쑰체

  • μ›ν•˜λŠ” νŠΉμ • λ‚ μ§œ, μ‹œκ°„μ„ 생성할 수 μžˆλ‹€.

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)!
// ꡬ쑰체의 ν™•μž₯
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

  • μ ˆλŒ€μ  μ‹œμ (μ΄ˆκΈ°μ€€)의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

  • μ›ν•˜λŠ” λ‚ μ§œ, μ‹œκ°„μœΌλ‘œ μ„ΈνŒ…ν•˜λŠ” 방법이닀.

μ§€μ†μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κ΅¬ν˜„

  • 계속 μ‚¬μš©ν•˜κ²Œ 될 μ½”λ“œλŠ” 성격을 νŒŒμ•…ν•΄μ„œ μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œ λ“±μœΌλ‘œ κ΅¬ν˜„ν•΄μ„œ μ½”λ“œμ— λ„£λŠ”λ‹€.

  • μ‹€μ œλ‘œλŠ” 계산 속성(보편적), νƒ€μž… λ©”μ„œλ“œ, μ…μ„±μž, μ„œλΈŒμŠ€ν¬λ¦½νŠΈ λ“±μœΌλ‘œ κ΅¬ν˜„ν•œλ‹€.

Last updated