[Swift] 날짜와 시간

임승섭·2023년 7월 13일
0

Swift

목록 보기
26/35

Date 구조체

  • Date() : 지금 현재시점 Date 인스턴스 생성
let now = Date()			// 2023-07-13 00:47:34 +0000
let yesterday = now - 86400	// 2023-07-12 00:47:34 +0000

Calendar 구조체

  • 절대 시점(Date)을 달력의 요소 (연/월/일/요일)로 변환해준다
var calendar = Calendar.current		// 타입 속성 - 현재의 달력 반환


/*-----Ex 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)

/*-----Ex 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)

/*-----Ex 3. 요일-----*/
let weekday: Int = calendar.component(.weekday, from: now)
// 일-1, 월-2, 화-3, ... , 토-7



/*여러 개의 데이터를 얻는 방법*/
let myCal = Calendar.current
var myDateCom = myCal.dateComponents([.year, .month, .day], from: now)

myDateCom.year
myDateCom.month
myDateCom.day
print("\(myDateCom.year!)\(myDateCom.month!)\(myDateCom.day!)일")

DateFormatter

  • 날짜와 시간을 원하는 형식의 문자열로 변환하는 방법을 제공하는 클래스
let formatter = DateFormatter()

/*기본 설정*/
// 1. 지역 설정
formatter.locale = Locale(identifier: "en_US")

// 2 시간대 설정
formatter.timeZone = TimeZone.current


/*문자열 설정*/
// 1. 날짜 형식 선택
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"

// 2. 시간 형식 선택
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 someString1 = formatter.string(from: Date())
print(someString1)


/*커스텀 문자열 설정*/
formatter.dateFormat = "yyyy년 MMMM d일 (E)"
let someString2 = formatter.string(from: Date())
print(someString2)




/*(반대로) 문자열에서 Date로 변환*/
let newFormatter = DateFormatter()
newFormatter.dateFormat = "yyyy/MM/dd"


let someDate = newFormatter.date(from: "2021/07/12")!
print(someDate)

활용 예시

DateComponents

var components = DateComponents()    // 구조체 (날짜/시간의 요소들을 다룰 수 있는)
components.year = 2021
components.month = 1
components.day = 1

components.hour = 12
components.minute = 30
components.second = 0

// components를 Date화 시킨다
let specifiedDate: Date = Calendar.current.date(from: components)!
print(specifiedDate)


/*구조체의 확장을 이용해서 더 세련되게 구현하기*/
extension Date {
    // 구조체 실패가능 생성자로 구현
    init?(y year: Int, m month: Int, d day: Int) {
        
        var components = DateComponents()
        components.year = year
        components.month = month
        components.day = day
        
        guard let date = Calendar.current.date(from: components) else {
            return nil  // 날짜 생성할 수 없다면 nil리턴
        }
        
        self = date      //구조체이기 때문에, self에 새로운 인스턴스를 할당하는 방식으로 초기화가능
    }
}

let someDate = Date(y: 2021, m: 1, d: 1)      // 특정날짜(시점) 객체 생성
let someDate2 = Date(y: 2021, m: 7, d: 10)

0개의 댓글