0

我有一个Person对象。这个人对象具有以下属性;

Name
StartDate
EndDate

我将这些Person对象保存到一个数组中。该数组可能包含超过 100 个人员对象。以上所有属性都是字符串。

以下是该数组中人员对象的示例;

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,我需要检查它是否在 person 对象的范围StartDateEndDate数组中。我有一个场景的伪代码。

我要检查的日期StartDate也是EndDate字符串。

伪代码:

if Startdate >= providedDate && EndDate <= providedDate {

// Add to an Array


else 

//Do not add to an array 

因为,StartDataEndDate都是ProvidedDate字符串,我如何检查它是否大于或小于提供的日期?

注意:我需要一种不使用的方法NSPredicate

4

2 回答 2

1

你在这里测试什么?将日期存储为字符串很奇怪。您是否打算解析字符串日期以便将它们与提供的日期进行比较?如果是这样,我会远离任何类型的约会课程。

如果是这样,我只需将其拆分为 3 个字符串——星期几、月份、日期。你不关心星期几。

你没有一年,所以你不能对此做任何逻辑......我想只是假设这一切都在同一年。(你可以做一些疯狂的事情,比如计算“最近哪一年的这一天是一周中的这一天”,但是来吧......)

将每个月与一个整数相关联。比方说,使用哈希映射。如 Months.put('January',1) 等。

从每个日期中获取数字——只需将字符串转换为整数即可。

那么某件事是在日期之前还是之后的逻辑是(如果 -1 是 myMonth 在之前,0 是它们相同,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;
于 2012-04-26T01:51:07.810 回答
1

为了比较值,您需要具有可比性的值。您可以使用 NSDate 对象,可以将日期转换为可排序的字符/数字形式(例如 20120425),或者您可以使用实现自己的compare:options:方法的自定义对象。

或者您可以编写一个单独的compareString:string1 toString:string2方法并使用您拥有的字符串。

你只需要下定决心要做什么。

于 2012-04-26T03:57:14.463 回答