我正在尝试弄清楚如何过滤NSArray
NSDate
个NSDate
个对象以找到下一个最近的对象(如公交站点应用)。这一天无关紧要。 dateWithString
对象中最重要的是小时和分钟,因为它每天都是相同的。
我正在尝试为iOS做这个,而且从我的研究来看,似乎没有适用于iOS的NSDateComponents
方法(大部分都忽略了我的代码,只是在那里概述我想要完成的工作) )。我查看了许多内容,例如NSCalendar
和NSArray
,但似乎无法弄明白。我只是希望能够过滤NSDate
个NSDate
个对象来查找下一个即将到来的总线(下一个最接近的NSDate *bus500_monday_To_Friday_T1 = [NSDate dateWithString:@"06:40:00"]; // 6:40 AM
NSDate *bus500_monday_To_Friday_T2 = [NSDate dateWithString:@"07:50:00"]; // 7:50 AM
NSDate *bus500_monday_To_Friday_T3 = [NSDate dateWithString:@"08:20:00"]; // 8:20 AM
NSDate *bus500_monday_To_Friday_T4 = [NSDate dateWithString:@"08:50:00"]; // 8:50 AM
NSDate *bus500_monday_To_Friday_T5 = [NSDate dateWithString:@"09:20:00"]; // 9:20 AM
NSDate *bus500_monday_To_Friday_T6 = [NSDate dateWithString:@"09:50:00"]; // 9:50 AM
NSDate *bus500_monday_To_Friday_T7 = [NSDate dateWithString:@"10:20:00"]; // 10:20 AM
NSDate *bus500_monday_To_Friday_T8 = [NSDate dateWithString:@"10:50:00"]; // 10:50 AM
NSDate *bus500_monday_To_Friday_T9 = [NSDate dateWithString:@"11:20:00"]; // 11:20 AM
NSDate *bus500_monday_To_Friday_T10 = [NSDate dateWithString:@"11:50:00"]; // 11:50 AM
NSDate *bus500_monday_To_Friday_T11 = [NSDate dateWithString:@"12:20:00"]; // 12:20 PM
NSDate *bus500_monday_To_Friday_T12 = [NSDate dateWithString:@"12:50:00"]; // 12:50 PM
NSDate *bus500_monday_To_Friday_T13 = [NSDate dateWithString:@"13:20:00"]; // 1:20 PM
NSDate *bus500_monday_To_Friday_T14 = [NSDate dateWithString:@"13:50:00"]; // 1:50 PM
NSDate *bus500_monday_To_Friday_T15 = [NSDate dateWithString:@"14:20:00"]; // 2:20 PM
NSDate *bus500_monday_To_Friday_T16 = [NSDate dateWithString:@"14:50:00"]; // 2:50 PM
NSDate *bus500_monday_To_Friday_T17 = [NSDate dateWithString:@"15:20:00"]; // 3:20 PM
NSDate *bus500_monday_To_Friday_T18 = [NSDate dateWithString:@"15:50:00"]; // 3:50 PM
NSDate *bus500_monday_To_Friday_T19 = [NSDate dateWithString:@"16:20:00"]; // 4:20 PM
NSDate *bus500_monday_To_Friday_T20 = [NSDate dateWithString:@"16:50:00"]; // 4:50 PM
NSDate *bus500_monday_To_Friday_T21 = [NSDate dateWithString:@"17:20:00"]; // 5:20 PM
NSDate *bus500_monday_To_Friday_T22 = [NSDate dateWithString:@"17:50:00"]; // 5:50 PM
NSDate *bus500_monday_To_Friday_T23 = [NSDate dateWithString:@"18:20:00"]; // 6:20 PM
NSDate *bus500_monday_To_Friday_T24 = [NSDate dateWithString:@"19:05:00"]; // 7:05 PM
NSArray *bus500Times = @[bus500_monday_To_Friday_T1,
bus500_monday_To_Friday_T2,
bus500_monday_To_Friday_T3,
bus500_monday_To_Friday_T4,
bus500_monday_To_Friday_T5,
bus500_monday_To_Friday_T6,
bus500_monday_To_Friday_T7,
bus500_monday_To_Friday_T8,
bus500_monday_To_Friday_T9,
bus500_monday_To_Friday_T10,
bus500_monday_To_Friday_T11,
bus500_monday_To_Friday_T12,
bus500_monday_To_Friday_T13,
bus500_monday_To_Friday_T14,
bus500_monday_To_Friday_T15,
bus500_monday_To_Friday_T16,
bus500_monday_To_Friday_T17,
bus500_monday_To_Friday_T18,
bus500_monday_To_Friday_T19,
bus500_monday_To_Friday_T20,
bus500_monday_To_Friday_T21,
bus500_monday_To_Friday_T22,
bus500_monday_To_Friday_T23,
bus500_monday_To_Friday_T24];
NSDate *currentTime;
NSDate *closestTime500;
while(YES)
{
currentTime = [NSDate dateWithTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]
sinceDate:[NSDate date]];
int i = 0;
for(NSDate *date in bus500Times)
{
if([date timeIntervalSinceDate:currentTime] > 0)
{
closestTime500 = date;
break;
}
}
double negativeSecondsUntilNextBusDepart500 = [currentTime timeIntervalSinceDate:closestTime500];
// Have to get the magnitude (positive) of the negative secodns value
double realSecondsUntilNextBusDepart500 = negativeSecondsUntilNextBusDepart500+((-negativeSecondsUntilNextBusDepart500)*2);
// Casting seconds to an integer so modulus can happen in following code
int seconds500 = (int)realSecondsUntilNextBusDepart500;
// Formatting the seconds into days, hours, minutes, seconds
int hours500 = seconds500/3600;
seconds500 = seconds500%3600;
int minutes500 = seconds500/60;
seconds500 = seconds500%60;
// Displaying information to the screen
if(hours500 > 0)
NSLog(@"%d HOURS, %d MINUTES, %d SECONDS", hours500, minutes500, seconds500);
else if(minutes500 > 0)
NSLog(@"%d MINUTES, %d SECONDS", minutes500, seconds500);
else
NSLog(@"%d SECONDS", seconds500);
NSLog(@"\n");
sleep(1);
}
对象)。请帮我调整我的代码。
{{1}}
答案 0 :(得分:0)
使用NSDate
的{{1}}(或-timeIntervalSinceDate:
)方法查找给定日期(或当前日期)之间的差异。对阵列中的每个日期执行此操作,直到找到差异最小(和正确的符号)的日期。简单地遍历数组就行了,但另一种方法是使用-timeIntervalSinceNow
的{{3}}方法。
答案 1 :(得分:0)
您需要使用dateWithString
将字符串转换为日期,而不是您承认的NSDateFormatter
。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"H:mm:ss";
NSDate *bus500_monday_To_Friday_T1 = [formatter dateFromString:@"06:40:00"]; // 6:40 AM
NSDate *bus500_monday_To_Friday_T2 = [formatter dateFromString:@"07:50:00"]; // 7:50 AM
...etc
然后,您可以使用NSDate
NSDate
timeIntervalSinceDate:
值(或您的参考日期)进行比较