如何在不使用NSCalendar的情况下创建NSDates(开始和结束)?

时间:2013-02-01 23:26:22

标签: ios objective-c nsdate

我有一个iPad应用程序,使用XCode 4.5,iOS 6.0和Storyboard。我需要使用NSDate创建NSCompoundPredicate,我是由用户从UIDatePicker 中选择的。我看到的例子显示了NSCalendar和NSCalendarComponents的使用,两者都使用“默认”日历。

这是使用一个NSPredicate的代码,该代码可以使用但获取该日期的所有记录以及将来的所有日期,这是错误的。

NSMutableArray *apptDataArray = [NSMutableArray new];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(aStartTime = %@)", [dict objectForKey:@"selectedDate"]];

我需要使用NSCompoundPredicate,因为我需要获取特定日期的所有记录(从所选日期的午夜后1分钟到午夜)。

有没有办法从给定的NSDate为NSCompoundPredicate创建两个NSDate(开始和结束),在这种情况下:[dict objectForKey:@“selectedDate”](这是一个NSDate)? (此问题不是使用上述NSCalendar代码的this的副本。)

更新:以粗体显示更新的问题。

3 个答案:

答案 0 :(得分:4)

虽然您说您不想使用NSCalendar,但您已经是:

  

来自 UIDatePicker Class Reference

     

<强>日历
  用于日期选择器的日历。

     

@property(nonatomic, copy) NSCalendar *calendar

     

<强>讨论
  此属性的默认值对应于“设置”中配置的用户当前日历。这是等效的   通过调用NSCalendar类方法返回的值   currentCalendar。将日历设置为nil等同于设置它   为其默认值。

     

日历指定用于计算的文化系统的详细信息   时间;他们确定了一年的开始,长度和分歧。

基本上,获取可用于查询的准确值的唯一方法是使用用于创建NSDate的相同日历。因此,简短版本是:继续使用日历。事实上,使用这个:

NSCalendar *cal = [NSCalendar currentCalendar];

如果没有在某些时候引用日历 ,则无法真正创建有意义的NSDate对象。正如其他人所指出的那样,NSDate被存储为自特定日期和时间以来的秒数。除非您想完全重写所有日历操作以解决闰年,闰秒等问题,否则您应该使用Apple已经提供给我们的内容。

答案 1 :(得分:1)

NSDate表示自固定纪元以来的秒数。在内部,使用的时期是2001年1月1日凌晨00:00 UTC UTC + 0。跨平台的大多数API使用另一个时代,1970年1月1日,UTC时间上午12:00:00,称为“UNIX纪元”或“time_t纪元”,因此有一些API可以转换为该纪元/从该纪元转换。因此,日期只是一个类型NSTimeIntervaltypedef double的数字。)

要获得一天中的第一个和最后一刻,您需要定义“日”。这是通过日历完成的。大多数日历都有24小时工作日,但我确信有一个日历没有。

您说您无法使用NSCalendar因为您需要在不支持的日历中工作。你能告诉我们你需要使用哪个日历吗?

答案 2 :(得分:0)

在我看来它不可能(为什么你不想使用NSCalendar?)