Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- GeometryReader
- 스크롤 탭
- Tuist
- UIPresentationController
- swift
- Side Menu
- SwiftUI
- 개발자 면접
- DevelopmentRegion
- oberve url
- List
- Android
- convert base64
- detect url
- swift #swift keychain #keychain 사용법
- url 추적
- DataBinding
- notifychanged
- transformation.map
- Swift Package Manager
- url 관찰
- ios
- pod install
- ViewBuilder
- 상단 탭바
- scrolling tab
- development language
- base64 변환
- 기존 앱
- UIViewControllerTransitioningDelegate
Archives
- Today
- Total
버그 잡이
Swift - "오늘 하루 보지 않기" 팝업 Date() 계산하기 본문
팝업에는 보통 "오늘 하루 보지 않기" 버튼이 함께 있습니다.
하루에 대한 계산 기준은 기획에 따라 달라질 수 있는데요.
1. 지금부터 24시간 이후 다시 띄우기
2. 내일 0시부터 다시 띄우기
위와 같은 시간은 어떻게 계산할 수 있을까요?
1. 지금부터 24시간 이후 팝업 다시 띄우기
Calendar 구조체를 활용하면 간단하게 지금 날짜에 하루를 더할 수 있습니다.
현재 시간에 하루를 더하면 됩니다.
let today = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: today)
print(today) // 2020-09-28 12:44:35 +0000
print(nextDate) //Optional(2020-09-29 12:44:35 +0000)
팝업을 띄울지 말지는 nextDate가 현재 날짜보다 작은 경우에 팝업을 띄우고
그렇지 않은 경우는 팝업을 띄우지 않으면 되겠죠?
2. 내일 0시부터 팝업 다시 띄우기
하루를 더하는 것은 위와 동일합니다.
단, 여기에 Time을 00:00:00으로 만드는 작업을 추가해줘야겠죠?
var component = Calendar.current.dateComponents([.year, .month, .day], from: Date())
component.timeZone = TimeZone(abbreviation: "UTC")
let dateWithoutTime = Calendar.current.date(from: component)!
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: dateWithoutTime)
print(dateWithoutTime) // 2020-09-28 00:00:00 +0000
print(nextDate) // Optional(2020-09-29 00:00:00 +0000)
DateComponents를 활용하면 원하는 내가 원하는 시간의 요소만 넘겨줄 수 있습니다.
TimeZone을 UTC로 해준 이유는 timezone을 설정 하지 않는 경우(꼭, UTC일 필요는 없습니다.)
'2020-09-28 15:00:00 +0000' 로 출력되기 때문입니다.
(구글링 해봤는데 명확한 이유를 못 찾겠네요. 제 추측으로는 Swfit 오류인 것 같은데... 이유를 아시는 분은 댓글로 남겨주시면 감사하겠습니다 ㅠ)
-------
(24.07.28 업데이트)
위처럼 UTC로 timezone을 잡으면 정확한 날짜 비교가 안 될 수 있습니다.
KST로 timezone을 잡는 것이 보다 정확합니다. 관련 내용은 아래 블로그 내용 참고 부탁드립니다.
https://jinsangjin.tistory.com/189
반응형
'Swift' 카테고리의 다른 글
Swift - Attributed String으로 특정 글자만 색상 바꾸기 (0) | 2020.10.06 |
---|---|
Swfit - 객체를 포함한 json 을 string으로 변환하기 (0) | 2020.10.05 |
Swift 디버깅 식별자 #나만의 로그print 만들기 (0) | 2020.09.01 |
Swift 프로토콜 지향 프로그래밍(POP) (0) | 2020.08.19 |
Swift - Escaping Closure(탈출 클로저) 간단 이해 (0) | 2020.08.13 |
Comments