티스토리 뷰

date()에 하루 더하기

let date = Date()
print(date)
let date1 = Calendar.current.date(byAdding: .day, value: 1, to: date)
print(date1)
let date2 = Calendar.current.date(byAdding: .hour, value: 1, to: date)
print(date2!)

//2020-11-18 12:48:07 +0000
//Optional(2020-11-19 12:48:07 +0000)
//2020-11-18 13:48:07 +0000

테스트 시간은 21시48분인데 print에는 12:48으로 나옵니다.

이것은 date()가 UTC 00:00 기준이기 때문입니다.

(print할때만 UTC 00:00으로 나옵니다.)

하지만 이것을 앱을 만들때 사용하면 실제 기기의 timeZone에 따라서 자동으로 바뀝니다.

 

Date()에서 날짜 속성을 추출해보겠습니다.

let todayYear = Calendar.current.dateComponents([.year], from: date)
let todayMonth = Calendar.current.dateComponents([.month], from: date)
let todayDay = Calendar.current.dateComponents([.day], from: date)
print(todayYear, todayMonth, todayDay)
print(todayYear.year!, todayMonth.month!, todayDay.day!)

//year: 2020 isLeapMonth: false  month: 12 isLeapMonth: false  day: 7 isLeapMonth: false 
//2020 12 7

첫번째 print에서는 isLeapMonth, 윤달인지 아닌지가 나옵니다.

이것은 todayYear, todayMonth, todayDay가 DateComponents이기 때문입니다.

todayYear.year, todayMonth.month, todayDay.day을 해주시면 Int?값을 얻을 수 있습니다.

 

var dateFormatter: DateFormatter = {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss"
    
    return dateFormatter
}()

print(date)
print(dateFormatter.string(from: date))
//2020-11-18 12:48:07 +0000
//2020-11-18 21:48:07

DateFormatter을 사용할 경우 우리나라 시간과 맞게 나옵니다.

우리나라는 UTC+09:00입니다.

실제 앱을 만들 때는 print되는 날짜는 신경안써도 됩니다.

 

let date3 = Date(timeInterval: 60, since: date)
print(date)
print(date3)

//2020-11-18 12:48:07 +0000
//2020-11-18 12:49:07 +0000

timeInterval은 초단위로 시간을 변경할 수 있습니다.

하지만 하루를 더해주기 위해 60*60*24을 계산하는 것보다 처음에 사용한 Calendar.current.date 방법이 훨씬 직관적이고 편리합니다.

 

 

원하는 날짜를 만들때는 DateComponents를 사용합니다.

DateComponents는 전부 옵셔널로 되어있어서 원하는 값만 입력해서 만들 수 있습니다.

let dateComponents = DateComponents(year: 2020, month: 11, day: 18, hour: 21)
let date4 = Calendar.current.date(from: dateComponents)
print(date4!)
print(dateFormatter.string(from: date4!))

//2020-11-18 12:00:00 +0000
//2020-11-18 21:00:00

2020년 11월 18일 21시를 만들었습니다.

 

let timeZone = TimeZone(identifier: "America/Los_Angeles")!
let dateComponents2 = DateComponents( timeZone: timeZone ,year: 2020, month: 11, day: 18, hour: 4, minute: 00, second: 00)
let date5 = Calendar.current.date(from: dateComponents2)
print(date5!)
print(dateFormatter.string(from: date5!))

//2020-11-18 12:00:00 +0000
//2020-11-18 21:00:00

timeZone을 LA로 변경하고 현지 시간으로 2020년 11월 18일 4시를 만들었습니다.

이 시간은 우리나라 2020년 11월 18일 21시와 동일합니다.

 UTC 00:00기준은 변하지 않는 것을 알 수 있습니다.

 

시간과 날짜 차이를 계산하는 방법입니다.

let distanceHour = Calendar.current.dateComponents([.hour], from: date, to: date1!).hour
let distanceSecond = Calendar.current.dateComponents([.second], from: date, to: date1!).second

print(distanceHour!)
print(distanceSecond!)

//24
//86400
댓글
공지사항