1

我有两个NSDate,开始日期和结束日期。我想找到开始日期和结束日期之间的所有日期。我尝试了下面的代码,但出现以下错误:

-[__NSDate length]: unrecognized selector sent to instance 0xa484b30

self.m_maEventsForMonth = [NSMutableArray array];
NSPredicate * sPredicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", start, end];
[self.m_maEventsForMonth setArray:[m_maEvents filteredArrayUsingPredicate:sPredicate]];

我也尝试如下制作开始和结束字符串,但我得到了错误的结果:

NSString * sDateStart = [self dateToString:start format:@"M/d/yyyy"];
NSString * sDateEnd = [self dateToString:end format:@"M/d/yyyy"];

self.m_maEventsForMonth = [NSMutableArray array];
NSPredicate * sPredicate = [NSPredicate predicateWithFormat:@"(date BETWEEN %@)", @[sDateStart, sDateEnd]];

[self.m_maEventsForMonth setArray:[m_maEvents filteredArrayUsingPredicate:sPredicate]];

我不明白出了什么问题。任何帮助,将不胜感激。

更新:

我的 m_maEvents 是一个 NSMutableArray,我的自定义 EventObjects 定义如下:

@interface EventObject : NSObject
{
    NSString    * title;
    NSString    * date;
    NSString    * starttime;
    NSString    * endtime;
    NSString    * location;
    NSString    * url;
    NSMutableArray  * m_EventTypes;
    NSDate      * dtDate;
}

@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * date;
@property (nonatomic, retain) NSString * starttime;
@property (nonatomic, retain) NSString * endtime;
@property (nonatomic, retain) NSString * location;
@property (nonatomic, retain) NSString * url;
@property (strong, nonatomic) NSMutableArray * m_EventTypes;
@property NSDate * dtDate;

我用字符串初始化这些对象,并在 init 方法中创建 NSDate 对象。这些都不重要,我的问题是我不知道如何定义谓词来过滤两个日期之间的日期。我可以使用 NSDate 对象和字符串,但不确定如何定义谓词。我认为它使用字符串进行比较,这就是我得到长度错误的原因。

我需要自定义比较方法吗?如果是这样,我还没有做过。

4

2 回答 2

0

我的错……我所需要的只是在谓词语句中使用正确的属性。正确的属性是:dtDate,而不是日期。

于 2013-01-07T14:59:59.040 回答
0

希望这对你有用:

NSMutableArray dates = [NSMutableArray array];
NSDate *curDate = startDate;
while([curDate timeIntervalSince1970] <= [endDate timeIntervalSince1970]) //you can also use the earlier-method
{
    [dates addObject:curDate];
    curDate = [MSDate dateWithTimeInterval:86400 sinceDate:curDate];
}

(请注意:86400 = 60*60*24(1 天))。

希望对你有效。

于 2013-01-07T14:37:02.253 回答