与没有约会的时间合作

时间:2012-09-05 03:19:16

标签: cocoa-touch time nsdate

NSDate对象表示绝对日期和时间,例如2012年9月4日晚10点,CDT。虽然当某个事件确实发生在某个特定时刻时,这种方法很有效,但是当你处理一个反复发生的事情时,与NSDate合作会更麻烦。例如,我目前正在开发一个应用程序,用于存储企业的营业时间。大多数企业都有每周计划,这意味着我想存储每个工作日的时间,无论日期如何。

有几种解决方案:创建一个额外的实体(我正在使用Core Data),Hours,具有工作日,小时和分钟属性,并以此方式计算出来。这可以用于简单显示,但我也将添加“状态”(例如“打开直到x”,“在y分钟关闭”或“将在z打开”)。这意味着我要么必须创建NSDate个对象来进行比较,要么我采用当前NSDate的工作日,小时和分钟属性。

另一种选择是每个业务存储两个NSDate(打开和关闭),忽略实际日期并仅使用工作日,小时和分钟属性。我试过这个,但为了能够比较日期,我仍然需要操纵NSDate个对象。

这些是我提出的解决方案。两者都需要大量的数学,并涉及一堆ifs,buts和maybes。简单地拥有某种“NSTime”对象非常容易,我可以用它完成所有事情,但这似乎并不存在。

是否有其他人遇到过相同的问题并找到了更好的解决方案?

2 个答案:

答案 0 :(得分:3)

我认为你最好创建自己的抽象。这将更好地适应您试图解决的问题。一些帮助提示:

答案 1 :(得分:2)

  

简单地拥有某种“NSTime”对象真的很容易   我可以做任何事情,但这似乎不存在。

一种选择是使用NSDateComponents,您可以在其中存储您感兴趣的日期部分,例如小时,分钟和秒。

由于您真的只想存储一天中的时间,因此另一个选择是创建自己的Time类。 NSDate将时刻存储为单个数字:自固定时间以来的秒数,即纪元。你的Time类几乎可以做同样的事情,除了它会使用午夜作为参考点。但是,如果您无法指出超出当天结束的时间,则可能会遇到问题。例如,如果餐厅一直营业至凌晨2点,您可能希望能够代表餐厅开业当天的相关信息。也许更好的选择是让你的Time类在内部使用NSDate,但总是有一个固定的开始日期。