티스토리 뷰
안녕하세요 밀쿄입니다.
오늘은 날짜를 비교하는 방법에 대해서 알아보겠습니다.
제가 날짜를 비교할 때 두 날짜의 차이를 연산해서 0인지 늘 체크했었는데 그것보다 더 간단한 방법이 있더라구요.
오늘은 그거에 대해 알아보겠습니다,
하지만 그거만 하면 글이 짧아질 것 같으니 유용한 팁 하나도 같이 넣어두겠습니다.
○ Date()로 생성한 날짜로 현지 시간에 맞게 출력하고 싶을 때
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy. MM. dd HH:mm:ss"
dateFormatter.timeZone = TimeZone.current
print(dateFormatter.string(from: date))
//출력: 2019. 12. 24 10:41:48
보통은 이렇게 String으로 변환하면서 타임존을 설정해서 현지 시간에 맞게 출력합니다.
하지만 지금 우리가 해볼 것은 Date타입 그대로 현지 시간에 맞게 출력해봅시다.
var date = Date()
date.addTimeInterval(3600 * 9)
print(date)
// 출력: 2019-12-24 10:42:10 +0000
이렇게 할 수 있습니다. 쉽죠?
하지만 이렇게하면 표준시(그리니치 천문대)와 시차가 얼마인지 알아야하고 현지 시간에 대응하기 어렵습니다.
그럼 어떻게해야할까요?
그리니치 천문대와 현재 타임존과 시차를 그대로 알려주는 함수가 있으면 해결될 것 같습니다,
애플에서는 그걸 위해서 함수를 제공해주고 있습니다. ( 여기 )
print(TimeZone.current.secondsFromGMT())
//출력: 32400
32400이란 값은 초단위 입니다. 즉 32400초라는거죠. 그리고 보이는 것처럼 Int타입입니다.
쉽게말하면 1시간에 3600초니까 9시간차이가 난다는 뜻입니다,
저걸 활용해서 어떻게 하면 좋을까요?
Date를 생성할 떼 저 숫자만큼 더해주면 되겠죠?
그 역할을 하는 함수 역시 존재합니다 ( 여기 )
let calendar = Calendar.current
let today = Date()
let localDate = Date(timeInterval: TimeInterval(calendar.timeZone.secondsFromGMT()), since: today)
// 출력
// 2019-12-24 01:48:43 +0000
// 2019-12-24 10:48:43 +0000
정확하게 잘 나옵니다. 단지 이렇게 생성하면 타임존은 바뀌지않습니다.
참고로 TimeInterval은 typealias로써 그냥 Double의 또 다른 별칭입니다.
쉽게 생각하면 Int를 TimeInterval이란 Double로 감싸서 Double로 바꿔준 거라고 생각하시면 되겠습니다.
자 그럼 오늘의 본론으로 돌아가서 날짜를 어떻게 비교하는 지 한 번 시작해봅시다.
let calendar = Calendar.current
let today = Date()
let localDate = Date(timeInterval: TimeInterval(calendar.timeZone.secondsFromGMT()), since: today)
if calendar.compare(today, to: localDate, toGranularity: .day) == .orderedSame {
print("This is True")
} else {
print("This is False")
}
//출력: This is True
이렇게 비교하면 됩니다. 정말 쉽고 간단합니다.
지금은 같은 날짜인지 비교했지만 toGranularity에 넣는 거에 따라 다양한 것을 넣을 수 있습니다.
toGranularity은 Calendar.Component 타입이므로 애플문서에 컴포넌트에 뭐가 있는지 보고 적재적소에 맞는걸 넣으셔서 비교하시면 됩니다.
'Swift&IOS' 카테고리의 다른 글
translatesAutoresizingMaskIntoConstraints (0) | 2019.12.30 |
---|---|
[AutoLayout] leading, trailing, left, right (0) | 2019.12.26 |
[AutoLayout] FirstBaseLineAnchor & LastBaseLineAnchor (0) | 2019.12.22 |
Sequence (0) | 2019.12.17 |
MVC(Model-View-Controller)? (0) | 2019.10.23 |
- Total
- Today
- Yesterday
- compactMap
- ios
- AutoLayout
- Apple
- 텔큐온
- 스위프트유아이
- swift
- 유니온파인드
- Just
- 삨
- iOSCombine
- 현업이그리운
- combine
- 알고리즘
- SwiftUI
- ErrorHandling
- 스택뷰
- 자료구조
- replaceNil
- programmers
- CombineLatest
- Queue
- 콤바인
- UIViewControllerRepresentable
- SEQUENCE
- MVC
- 결합연산자
- 스위프트
- BBIK
- 스유
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |