현재 학교 일정을 다루는 일정 응용 프로그램을 만들고 있습니다. 각 일정에는 시작 시간과 종료 시간을 모두 포함하는 기간 개체 배열이 있습니다. 현재 나는이 시간을 NSDate 객체로 저장합니다. 단지 시간 만이 관련이 있고 각 NSDate 객체는 내 응용 프로그램에별로 중요하지 않은 임의의 날짜를 가지고 있습니다 (UIDatePicker가 할당 한 것은 무엇이든간에 TimePickerMode 만 사용합니다).). 나는이 날짜들에 여러 가지 일을한다. 먼저 NSDateFormatter를 사용하여 UITableView의 각 기간에 대한 시간의 문자열 표현을 출력합니다. 그런 다음 [NSDate date]에 의해 가져온 현재 시간을 시작 및 종료 시간과 비교하여 해당 날짜의 현재 기간을 찾으려고 시도합니다. 하지만이 작업을 수행하는 가장 좋은 방법을 결정하는 데 문제가 있습니다.주어진 시간의 NSDate 객체를 같은 시간과 현재 날짜로 변환하는 가장 효율적인 방법
현재 NSDateFormatter를 사용하여 시작 및 종료 시간을 문자열로 변환 한 다음 현재 날짜와 현재 날짜가 같은 날짜로 다시 변환합니다. 그런 다음 - (NSComparisonResult) 비교를 사용하여 내 날짜 비교를 수행 할 수 있습니다. 시작 날짜와 종료 날짜를 현재 날짜와 비교합니다. 그러나, 나는 이것을 매우 비효율적이라고 생각할 수 있습니다.
다른 가능한 방법은 각 NSDate를 NSDateComponents로 변환 한 다음 NSCalendar를 사용하여 해당 날짜를 현재 날짜와 동일한 원래 시간으로 NSDate로 변환하는 것입니다.
아니면 다른 접근 방식을 취해서 NSDate 저장 기술을 모두 사용할 수 있습니다. 대신 NSDateComponents로 각 시작 및 종료 시간을 저장할 수 있습니다. 그러면 UITableView에 대한 시간의 형식화 된 버전을 출력하기에 충분히 간단 할 것입니다. 그런 다음 [NSDate date]에 의해 얻은 날짜를 NSDateComponents로 변환하여 논리에 사용할 수 있습니다. 비교를 통해 현재 기간을 얻습니다.
세 가지 또는 네 가지 다른 방법이 있습니다. 실제로 말한 후에 실제로 다른 유형 간의 런타임 변환이 가장 적게 필요하므로 가장 효과적이라고 생각합니다. 날짜 개체. 나는 다른 사람들의 의견을 찾고있는 중이다.
이것은 일반적으로 간과 된 변환을 포함하고 있습니다. 수정 된 timeIntervalSinceReferenceDate를 현재 시간대를 반영하는 것으로 변환합니다. timeIntervalSinceReferenceDate는 2001 년 1 월 1 일 자정 (GMT)부터 자정 이후 초를 반환하기 때문에 시간 간격을 변경하면 자정 이후 실제 시간 간격에서 18000 또는 5 시간이되는 숫자가됩니다. 따라서, 자정 이래로 초 수를 얻고 싶을 때마다 NSCalendar 객체를 생성해야 할 수도 있습니다. – ecbtln
자정 이후로 몇 초 동안 필요하지 않습니다. 예를 들어, 오전 9시 30 분이 자정 이후로 항상 동일한 초 수가되는 것은 아닙니다. NSCalendar가 필요할 경우 오전 9시 30 분에 도착해야합니다. – gnasher729