我有一个Person
个对象。此person对象具有以下属性;
Name
StartDate
EndDate
我将这个Person
对象保存到数组中。此数组可能包含超过100个人对象。以上所有属性都是字符串。
以下是该数组中person对象的示例;
John, Tue Feb 22, Thr Mar 30
Jack, Wed Mar 09, Fri Apr 21
Jack, Thu Mar 19, Fri Dec 20
Jack, Tue Jan 08, Fri Apr 26 etc..
现在我需要提供一个日期,例如Wed 29 Mar
,我需要检查它是否在人物对象数组中的StartDate
和EndDate
范围内。我有一个场景的伪代码。
我要针对StartDate
和EndDate
检查的日期也是字符串。
的伪代码:
if Startdate >= providedDate && EndDate <= providedDate {
// Add to an Array
else
//Do not add to an array
由于StartData
,EndDate
和ProvidedDate
都是字符串,我如何检查其是否大于或小于提供的日期?
注意:我需要一种不使用NSPredicate
答案 0 :(得分:1)
你在这里测试的是什么?将日期存储为字符串很奇怪。您是否要解析字符串日期以便将它们与提供的日期进行比较?如果是这样,我将远离任何类型的日期类别。
如果是这样,我只需将它分成3个字符串 - 一周中的一天,一个月,一天。你不关心一周中的某一天。
你没有一年,所以你不能对此做任何逻辑...我想只是假设它在同一年。 (你可以做一些疯狂的事情,比如计算'这一天最近一年的这一天是在一周的这一天',但是来吧......)
每个月与整数相关联。让我们说,使用哈希映射。与Months.put('January',1)等相同。
从每个日期中获取数字 - 只需将字符串转换为整数。
然后关于某事是在日期之前还是之后的逻辑是(如果-1是myMonth,那么它们是相同的,1是myMonth之后)
if (Months.get(myMonth) < Months.get(providedMonth)) return -1
else if (Months.get(myMonth) > Months.get(providedMonth)) return 1
else
if (myDate < providedDate) return -1;
else if (myDate > providedDate) return 1;
else return 0;
答案 1 :(得分:1)
为了比较值,您需要具有可比性的值。您可以使用NSDate对象,可以将日期转换为可排序的字符/数字形式(例如20120425),也可以使用实现自己的compare:options:
方法的自定义对象。
或者您可以编写单独的compareString:string1 toString:string2
方法并使用字符串。
你只需要下定决心。