- This topic has 4개 답변, 3명 참여, and was last updated 4 years, 8 months 전에 by 멍단비.
-
글쓴이글
-
-
성훈참가자
- 글작성 : 2
- 답글작성 : 14
Swift에서는 Date를 이용하여 날짜를 정의할 수 있습니다.
그리고 많은 분들이 이미 DateFormatter를 이용하여 String을 날짜로 바꾸거나 날짜를 문자열로 변경하시고 계실겁니다
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let date = dateFormatter.date(from: "2020-03-26 11:41:36") print(date) // Optional(2020-03-26 02:41:36 +0000)
하지만 DateFormatter만으로는 날짜를 다루는데에 한계가 있습니다. 그래서 날짜를 좀 더 쉽게 다룰수 있도록 도와줄 Calendar에 대해 이야기 해보겠습니다.
Calendar는 많은 기능을 담고 있습니다. 이번에는 간략한 몇가지만 알아보겠습니다.
- 달이나 시간등 특정 시간 값 가져오기
let calendar = Calendar.current let date = dateFormatter.date(from: "2020-03-26 11:41:36") let hourComponents = calendar.dateComponents([.hour], from: date!) let hour = hourComponents.hour print(hour) // Optional(11)
- 특정 시간값 변동하기
let calendar = Calendar.current let date = dateFormatter.date(from: "2020-03-26 11:41:36") let afterHour = calendar.date(byAdding: .hour, value: 1, to: date!) print(date) print(afterHour)
- 날짜가 오늘인지 확인
let calendar = Calendar.current let isToday = calendar.isDateInToday(Date()) print(isToday) // true // 오늘 뿐만 아니라 어제, 내일, 그리고 주말인지 확인할 수도 있다 /* calendar.isDateInTomorrow(Date()) calendar.isDateInYesterday(Date()) calendar.isDateInWeekend(Date()) */
이 외에도 Calendar는 다양한 기능을 가지고 있습니다. 두개의 날짜가 같은 날짜인지도 비교하고 기준일을 인자로 받아 다음 주말이 언제인지도 확인할 수도 있습니다.
2020-03-26 오후 12:02 #4524 -
성훈참가자
- 글작성 : 2
- 답글작성 : 14
저는
Date
는 자료형일 뿐이고, 이 자료형을 다루는 확장기능을DateFormatter
와Calendar
를 통하여 제공하고 있다고 생각합니다.
그래서Date
자료를 어떻게 활용할 지에 따라DateFormatter
와Calendar
중에 선택하여 기능을 구현합니다.DateFormatter
의 경우Date
를 표현해야 할 경우 적합한 포맷과 지역을 설정하여 사용하도록 하고,
Calendar
는Date
의 정보를 산술적인 계산을 필요로 할 때 활용합니다.이는
Date
의 애플문서에 소개된 내용입니다.
Date위에서 소개된 여러 기능들도
Date
만을 이용하여 구현한다던지,DateFormatter
를 이용하여 구현할 수도 있습니다.
다만 각각의 역할에 특화된 기능을 선택하여 구현함으로써 보다 간결하게 코드를 작성할 수 있습니다.덧붙여, 위의 예시에서 사용된
Calendar
의current
는 싱글톤 객체가 아닙니다. 말 그대로Calendar
의 기능을 호출 시점에 설정 기준으로Calendar
가 생성하게 되며, 이를 잘못 이해할 경우 각각의 호출 시점 사이에 사용자가 달력 설정을 바꿈으로써 의도치 않게 다른 결과를 가져올 수 있습니다.let calendar1 = Calendar.current // do Something let calendar2 = Calendar.current
이 코드에서 calendar1의 달력 기준은 calendar2와 다를 수 있습니다.
이러한 변경을 막기 위해선 다음과 같이 수정할 필요가 있습니다.
let calendar1 = Calendar.autoupdatingCurrent // do Something let calendar2 = Calendar.autoupdatingCurrent
Calendar
에 대한 더 자세한 설명은 아래 공식문서를 참고해 주세요
Calendar2020-03-27 오전 10:49 #4617
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.