我有一个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的副本。)
更新:以粗体显示更新的问题。
答案 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可以转换为该纪元/从该纪元转换。因此,日期只是一个类型NSTimeInterval
(typedef
double
的数字。)
要获得一天中的第一个和最后一刻,您需要定义“日”。这是通过日历完成的。大多数日历都有24小时工作日,但我确信有一个日历没有。
您说您无法使用NSCalendar
因为您需要在不支持的日历中工作。你能告诉我们你需要使用哪个日历吗?
答案 2 :(得分:0)
在我看来它不可能(为什么你不想使用NSCalendar?)