[Swift] 이 시기이기 때문에 수정된 iOS 10의 새로운 기능인 DateInterval(NSDateInterval)
왜 iOS 10입니까?
아이폰 출하 시 초기 버전은 최신 두 개 이전에 설정이에 따라 2개 전 버전부터 지원한다는 방침이다.
(회사 내부 사정으로 인해 터미널 버전을 올리지 못하는 회사도 있다)
이에 따라 이번 iOS 12 업그레이드로 iOS 10에서 사용할 수 있는 기능을 사용할 수 있게 됨에 따라 재조사한 내용을 주기적으로 기록하기로 했다.
이번에는 DateInterval입니다.
대단한 새로운 기능은 아니지만
나는 일상적인 개발에서 많은 역할을 할 수 있다고 생각한다.
DateInterval(NSDateInterval)
※ 스위프트이기 때문에 다트 인터벌로 대화를 나눈다.
프레임에 추가된 범주
어떤 날짜와 어떤 날짜 사이의 시간을 간단하게 나타낼 수 있다.
다음 세 가지 속성이 있습니다.
시작 시간
end (종료 날짜)
duration(간격)
다음과 같은 형식을 사용합니다.
let today = Date()
let tomorrow = Date(timeIntervalSinceNow: 60*60*24)
let next24Hours = DateInterval(start: today, end: tomorrow)
print(next24Hours) // 2018-06-05 21:48:48 +0000 to 2018-06-06 21:48:48 +0000
DateIntervalFormatter
다른 날짜 클래스와 마찬가지로 형식 클래스에서 표시 방식을 변경할 수 있습니다.
let formatter = DateIntervalFormatter()
formatter.locale = Locale(identifier: "ja_JP")
formatter.dateStyle = .full
formatter.timeStyle = .full
print(formatter.string(from: next24Hours)) // 2018/06/06 6:51:52~2018/06/07 6:51:52
// ↑と同じ意味になる
formatter.string(from: today, to: tomorrow)
구역 검사
contains 방법을 사용하면 일정 기간 내에 포함된 날짜와 시간을 확인할 수 있습니다.
// これはtrue
let holiday = DateInterval(start: Date(), duration: 60*60*24*4)
holiday.contains(Date(timeIntervalSinceNow: 60*60*24*3))
// これはfalse
let holiday = DateInterval(start: Date(), duration: 60*60*24*1)
holiday.contains(Date(timeIntervalSinceNow: 60*60*24*3)) // false
// 同じだとfalseになる
let holiday = DateInterval(start: Date(), duration: 60*60*24*3)
holiday.contains(Date(timeIntervalSinceNow: 60*60*24*3))
비교하다
compoare 방법이 있지만 조작원을 사용해도 비교할 수 있습니다.
비교 방법은 먼저 시작 날짜와 시간을 비교하고 같으면 날짜 간격을 비교한다.
// 開始日時がc1の方が前
let c1 = DateInterval(start: Date(), duration: 60*60*24*2)
let c2 = DateInterval(start: Date(timeIntervalSinceNow: 60*60*24*1), duration: 60*60*24*2)
c1 < c2 // true
// 開始日時は同じ、日時間隔はc3の方が短い
let now = Date()
let c3 = DateInterval(start: now, duration: 60*60*24*1)
let c4 = DateInterval(start: now, duration: 60*60*24*2)
c3 < c4 // true
// compareメソッドを使用した場合
// orderedAscendingが出力される
switch c1.compare(c2) {
case .orderedAscending:
print("orderedAscending")
case .orderedDescending:
print("orderedDescending")
case .orderedSame:
print("orderedSame")
}
반복 검사
어떤 DateInterval이 다른 DateInterval과 겹치는 부분이 있는지 알아보기 위해서.
intersects 방법을 사용할 수 있습니다.
var components = Calendar.current.dateComponents([.year, .weekOfYear], from: Date())
components.weekday = 2
components.hour = 10
let firstDayOfWeek = Calendar.current.date(from: components)!
components.weekday = 6
components.hour = 19
let lastDayOfWeek = Calendar.current.date(from: components)!
let workWeek = DateInterval(start: firstDayOfWeek, end: lastDayOfWeek)
formatter.locale = Locale(identifier: "ja_JP")
formatter.string(from: workWeek) // 2018/06/04 10:00:00~2018/06/08 19:00:00
// これは重複しているのでtrue
components.weekday = 4
components.hour = 0
let holidayStart = Calendar.current.date(from: components)!
let paidHolidays = DateInterval(start: holidayStart, duration: 60*60*24*3)
paidHolidays.intersects(workWeek)
// 重複していないのでfalse
components.weekday = 6
components.hour = 20
let otherHolidayStart = Calendar.current.date(from: components)!
let otherHolidays = DateInterval(start: otherHolidayStart, duration: 60*60*24*2)
otherHolidays.intersects(workWeek) // false
실제 중첩된 부분을 꺼내려면인터페이스 방법을 사용합니다.
if let holidays = paidHolidays.intersection(with: workWeek) {
formatter.string(from: holidays) // 2018/06/06 0:00:00~2018/06/08 19:00:00
}
총결산
DateInterval은 수수한 추가일 수 있습니다.
일상생활에 유용한 점이 많을지도 몰라요.
실제로 다른 추가 학급이 있을 수도 있어요.
찾아볼게요.
만약 무슨 잘못이 있으면 지적해 주십시오.
관련 기사:
[Swift] 이 시기라서 수정된 iOS 10의 새로운 기능인 UIGraphicsImageRenderer와 UIViewPropertyAnimatior
[Swift] 이 시기부터 iOS 10의 새로운 기능인 UserNotifications, Notification Content Extension과 Notification Service Extension을 재검토하겠습니다.
[Swift] 이 시기이기 때문에 수정된 iOS 10의 새로운 기능인 AVcapture Photo Output AVcapture Settings 등
[Swift] 이 시기부터 iOS 10의 새로운 기능인 UItableView UICollectionView의 개선과 Proe-Fetching API를 재검토하겠습니다.
[Swift] 이 시기라 수정된 iOS 10의 새로운 기능인 UIPreview Interaction(3D Touch)
Reference
이 문제에 관하여([Swift] 이 시기이기 때문에 수정된 iOS 10의 새로운 기능인 DateInterval(NSDateInterval)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shiz/items/cf3c56d578e66060a2d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)