В настоящее время я создаю приложение планирования, которое работает с расписанием школ. Каждое расписание имеет массив объектов периода, который содержит время начала и окончания. В настоящее время я храню эти времена как объекты NSDate, где только время действительно имеет значение, и каждый объект NSDate имеет произвольную дату, связанную с ним, которая в значительной степени незначительна для моего приложения (это все, что назначает UIDatePicker, но я использую только TimePickerMode ). Я делаю несколько вещей с этими датами. Во-первых, я использую NSDateFormatter для вывода строкового представления времени для каждого периода в UITableView. Затем я также пытаюсь найти текущий период дня, сравнивая текущее время, извлеченное с помощью [Дата NSDate], с временем начала и окончания. Но у меня проблемы с выбором лучшего способа сделать это.
В настоящее время я использую NSDateFormatter для преобразования времени начала и окончания в строки, а затем обратно в даты, которые теперь имеют дату, совпадающую с сегодняшней датой. Затем, после этого, я могу выполнить сравнение дат, используя - (NSComparisonResult) сравнение: сравнение дат начала и окончания с текущей датой. Тем не менее, я мог считать это очень неэффективным.
Другими возможными способами могут быть преобразование каждого NSDate в NSDateComponents, а затем использование NSCalendar для преобразования этого обратно в NSDate с текущей датой и тем же исходным временем.
Или я мог бы использовать другой подход и вообще отказаться от техники хранения NSDate. Вместо этого я мог бы хранить каждое время начала и окончания как NSDateComponents, тогда было бы достаточно просто вывести отформатированную версию времени для UITableView, а затем я мог бы преобразовать дату, полученную с помощью [NSDate date], в NSDateComponents для использования для сравнения для получения текущего периода.
Я вижу три или четыре разных способа решения этой проблемы, и на самом деле после обсуждения этого, я вполне уверен, что окончательный вариант, который я обсуждал, был бы наиболее эффективным, поскольку он требует наименьшего количества преобразований во время выполнения между различными типами. объекты даты. Я просто ищу мнения других людей.