我目前正在创建一个处理学校日程安排的日程安排应用程序。每个计划都有一个包含开始时间和结束时间的期间对象数组。目前我将这些时间存储为 NSDate 对象,其中只有时间是真正相关的,并且每个 NSDate 对象都有一些与之关联的任意日期,这对我的应用程序来说基本上是微不足道的(它是 UIDatePicker 分配给它的任何日期,但我只使用 TimePickerMode )。我用这些日期做了很多事情。首先,我使用 NSDateFormatter 在 UITableView 中输出每个时间段的时间字符串表示形式。然后,我还尝试通过将 [NSDate 日期] 获取的当前时间与开始和结束时间进行比较来找到当天的当前时段。但我无法决定最好的方法来做到这一点。
目前,我使用 NSDateFormatter 将开始时间和结束时间转换为字符串,然后返回到现在日期与今天日期相同的日期。然后,我可以使用 - (NSComparisonResult)compare: 将开始日期和结束日期与当前日期进行比较来进行日期比较。但是,我可以认为这是非常低效的。
其他可能的方法是将每个 NSDate 转换为 NSDateComponents,然后使用 NSCalendar 将其转换回具有当前日期和相同原始时间的 NSDate。
或者,我可以采取不同的方法,完全放弃 NSDate 存储技术。相反,我可以将每个开始和结束时间存储为 NSDateComponents,然后为 UITableView 输出时间的格式化版本就足够简单了,然后我可以将 [NSDate date] 获得的日期转换为 NSDateComponents 用于逻辑比较以获得当前期间。
我看到了三到四种不同的方式来解决这个问题,实际上在讨论完之后我非常有信心我讨论的最后一种方式将是最有效的,因为它需要在不同类型的日期对象之间进行最少的运行时转换。我只是在寻找其他人的意见。