1

对象表示绝对日期和时间,例如 2012年NSDate9 月 4 日,晚上 10:00 CDT。虽然当事件确实在某个时刻确实发生时这很好用,NSDate但当您处理重复发生的事件时,处理起来就麻烦多了。例如,我目前正在开发一个存储企业营业时间的应用程序。大多数企业都有每周计划,这意味着我想存储每个工作日的时间,无论日期如何。

有几种解决方案:创建一个额外的实体(我正在使用核心数据),小时,具有工作日、小时和分钟的属性,然后以这种方式计算出来。这可以用于简单的显示,但我还要添加一个“状态”(例如“打开到 x”、“在 y 分钟内关闭”或“将在 z 处打开”)。这意味着我要么必须创建NSDate对象来进行比较,要么获取 current 的 weekday、hour 和 minute 属性NSDate

另一种选择是为NSDate每个企业存储两个 s(打开和关闭),忽略实际日期,仅使用工作日、小时和分钟属性。我已经尝试过了,但是为了能够比较日期,我仍然必须操作NSDate对象。

这些是我想出的解决方案。两者都需要大量的数学运算,并涉及大量如果、但是和可能。简单地拥有某种我可以做所有事情的“NSTime”对象真的很容易,但这并不(似乎)存在。

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

4

2 回答 2

3

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

于 2012-09-05T03:30:51.333 回答
2

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

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

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

于 2012-09-05T04:01:08.033 回答