-1

我有一个 iPad 应用程序,使用 XCode 4.5、iOS 6.0 和 Storyboards。我需要使用 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 代码的这个问题的重复。

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

4

3 回答 3

4

当您说您不想使用 aNSCalendar时,您已经是:

UIDatePicker 类参考

calendar
用于日期选择器的日历。

@property(nonatomic, copy) NSCalendar *calendar

讨论
此属性的默认值对应于在设置中配置的用户当前日历。NSCalendar这相当于调用类方法 返回的值currentCalendar。将 calendar 设置为 nil 相当于将其设置为默认值。

日历规定了用于计算时间的文化系统的细节;他们确定了一年的开始、长度和划分。

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

NSCalendar *cal = [NSCalendar currentCalendar];

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

于 2013-02-02T04:44:52.903 回答
1

An表示自固定epochNSDate以来的秒数。在内部,使用的纪元是 2001 年 1 月 1 日 12:00:00AM UTC+0。跨平台的大多数 API 使用另一个纪元,即 1970 年 1 月 1 日 12:00:00AM UTC+0,称为“UNIX 纪元”或“纪元”,因此也有 API 可以与该纪元进行转换。因此,日期只是一个数字,类型为(a of .)time_tNSTimeIntervaltypedefdouble

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

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

于 2013-02-02T00:06:06.120 回答
0

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

于 2013-02-01T23:42:50.570 回答