2016-08-05 217 views
0
NSDate *currentTime = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
         [dateFormatter setDateFormat:@"hh:mm"]; 
NSString *resultString = [dateFormatter stringFromDate: currentTime]; 
NSDate* firstDate = [dateFormatter dateFromString:resultString]; 
NSDate* secondDate = [dateFormatter dateFromString:@"16:00"]; 
NSTimeInterval timeDifference = [secondDate timeIntervalSinceDate:firstDate]; 

if (timeDifference < 0){ 

我試圖檢索當前時間並將其與輸入時間進行比較。這是我的代碼的一部分(iOS的目標c),但NSTimeInterval導致一個斷點。除此之外,我還希望將該日期納入比較,所以如果週二下午5點之後會發生事件。所以,如果你有任何想法如何納入,以及將不勝感激!比較當前日期和時間iOS

+0

約翰的答案在下面是比較日期的基本形式。 (並且請注意,在比較之前不需要轉換爲字符串並返回。)關於「星期二下午5點以後」的內容有點鬼鬼祟祟,可能需要單獨提問 - 需要指定不同時區的行爲,不管它是「任何」星期二等 –

回答

2

若要比較兩個日期:

if ([firstDate compare:secondDate] == NSOrderedDescending) { 
    NSLog(@"firstDate is later than secondDate"); 
    NSTimeInterval timeDifference = [firstDate timeIntervalSinceDate:secondDate]; 
} else if ([firstDate compare:secondDate] == NSOrderedAscending) { 
    NSLog(@"firstDate is earlier than secondDate"); 
    NSTimeInterval timeDifference = [secondDate timeIntervalSinceDate:firstDate]; 
} else { 
    NSLog(@"firstDate and secondDate are the same"); 
} 

這應該解決您的問題。

+0

如果我希望它只在某個特定的日子,該怎麼辦?假設在週二的5點會發生一個事件,但在5點週三它不會。 – DSmith

+2

@DSmith:像這樣的NSDate對象體現的「日期」表示絕對全局意義上的現實世界時間中的特定單點。該時間點可以表示爲特定時間段的日期和時間,或與其他特定時間點進行比較。它不會*表示一般的「時間」或任何其他一般概念。如果你想弄清楚如何表示你正在尋找的東西,你可能想要更具體地問這個問題,以獲得最佳的建模幫助。 –

0
NSDate *currentTime = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
         [dateFormatter setDateFormat:@"hh:mm"]; 
NSString *resultString = [dateFormatter stringFromDate: currentTime]; 
NSDate* firstDate = [dateFormatter dateFromString:resultString]; 
NSDate* secondDate = [dateFormatter dateFromString:@"16:00"]; 
NSComparisonResult result = [secondDate compare:firstDate]; 
     switch(result){ 
      case NSOrderedDescending: 
       NSLog(@"date1 is later than date2"); 
       break; 
      case NSOrderedAscending: 
       NSLog(@"date1 is earlier than date2"); 
       break; 
      default: 
       NSLog(@"dates are the same"); 
       break; 
     }