[Swift] 이 시기이기 때문에 수정된 iOS 10의 새로운 기능인 DateInterval(NSDateInterval)

16450 단어 Swiftios10
WWDC에 있지만 이전 iOS 버전은 계속 수정되고 있습니다.

왜 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)

좋은 웹페이지 즐겨찾기