티스토리 뷰
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
'iOS' 카테고리의 다른 글
[iOS] Swift CollectionViewCell Size 컬렉션뷰 셀 사이즈 (0) | 2020.11.20 |
---|---|
[iOS] Swift UNUserNotificationCenter 특정 시간에 알림, 로컬노티 보내기, Date()를 DateComponents로 변환 (0) | 2020.11.19 |
[iOS] Swift AppIcon 쉽게 설정하기, 앱 아이콘 설정 (0) | 2020.11.14 |
[iOS] Swift UIScrollView AutoLayout 스크롤뷰 레이아웃 설정하기 (5) | 2020.11.13 |
[iOS] Swift 회원가입 화면 만들기 (0) | 2020.11.03 |