πŸ‘¨β€πŸŽ“
Today I Learned
  • Today-I-Learend
  • 🍎WWDC
    • Developer Tools
      • Testing in Xcode
    • UIKit
      • UIDiffableDataSource
        • [WWDC 19] Advances in UI Data Sources
      • [WWDC2019] Advances in CollectionView Layout
  • 자료ꡬ쑰
    • Heap 자료ꡬ쑰
  • Clean code
    • 넀이밍
    • 주석과 ν¬λ§·νŒ…
    • ν•¨μˆ˜
    • 클래슀
    • μ—λŸ¬ 핸듀링
    • 가독성 높이기
    • 객체지ν–₯
  • Network
    • RestAPI
  • Swift
    • DateType
    • ARC
    • Availablity
    • KeyPath
    • Network
    • Neverνƒ€μž…
    • Result
    • Selector
    • κ²€μ¦ν•¨μˆ˜
    • λ©”νƒ€νƒ€μž…
    • λ™μ‹œμ„± ν”„λ‘œκ·Έλž˜λ°
    • λ©”λͺ¨λ¦¬ μ•ˆμ „
    • μ—λŸ¬μ²˜λ¦¬
    • μ ‘κ·Όμ œμ–΄ (Access Control)
    • μ œλ„€λ¦­
    • μ£Όμš” ν”„λ‘œν† μ½œ
  • μ•Œκ³ λ¦¬μ¦˜
    • κ·Έλž˜ν”„
    • 기초 μ•Œκ³ λ¦¬μ¦˜
    • λˆ„μ ν•©(Prefix)
    • λ³΅μž‘λ„
    • λΉ„νŠΈλ§ˆμŠ€ν‚Ή
  • 운영체제
    • 운영체제의 κ°œμš”
    • ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ
    • CPU μŠ€μΌ€μ€„λ§
    • ν”„λ‘œμ„ΈμŠ€ 동기화
    • κ΅μ°©μƒνƒœ
    • 07. λ©”λͺ¨λ¦¬
    • 08.가상 λ©”λͺ¨λ¦¬
    • μž…μΆœλ ₯ μž₯치
    • 파일 μ‹œμŠ€ν…œ
  • UIKit
    • UITableView xib으둜 λ§Œλ“€μ–΄λ³΄κΈ°
  • πŸ–ŠοΈμ •λ³΄ 기둝
    • μ½”μ½”μ•„νŒŸ λ°°ν¬ν•˜λŠ” 방법
  • iOS Project
    • μ±„νŒ… μ•± λ§Œλ“€κΈ°
      • Trouble shooting
      • 1. λ””μžμΈ
      • 2. AutoLayout
    • 날씨 쑰회 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜
      • Figmaλ₯Ό μ΄μš©ν•œ UI 섀계
      • TableView μ—°κ²°ν•˜κΈ°
      • Networking
    • MVC -> MVVM으둜 ꡬ쑰 변경해보기
      • MVC
      • MVVM
    • OAuth Project
      • 둜컬 호슀트λ₯Ό μ΄μš©ν•œ 둜그인 νŽ˜μ΄μ§€ μ œμž‘
      • Github의 OAuth App μ„€μ •
    • Rest API ν”„λ‘œμ νŠΈ
      • UI섀계 (with Figma)
      • Network Model
      • MVVM ꡬ쑰 μ „ν™˜
  • πŸ•ΆοΈUIKit
    • Compositional Layout
Powered by GitBook
On this page
  • Date
  • UTC (Coordinated Universal Time)
  • Date ꡬ쑰체
  • Calendar
  • Date의 μ‹€μ œ ν™œμš© 방법
  • Calendarꡬ쑰체
  • Date의 λ…„/μ›”/일/μ‹œ/λΆ„/초 확인
  • μ˜ˆμ‹œ
  • DateFormatter
  • Date Formatter
  • 기본적인 μ‚¬μš© 방법
  • μ»€μŠ€ν…€ ν˜•μ‹μœΌλ‘œ 생성
  • λ¬Έμžμ—΄μ—μ„œ Date둜 λ³€ν™˜
  • 두 λ‚ μ§œ μ‚¬μ΄μ˜ 차이
  • Date Component
  • DateComponents
  • datecomponents
  • μ§€μ†μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κ΅¬ν˜„
  1. Swift

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

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

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

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

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

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

PreviousSwiftNextARC

Last updated 2 years ago