2012-03-18 66 views
0

我有一個字符串 - 時間,開始,結束:格式「hh:mm」NSDate from NSString like HH:mm

例如,「21:00」。 我需要比較 - 如果結束<開始和結束 之間的「時間」開始,例如(「21:10」「10:00」)應被視爲:第二天從'開始'到'結束' 。

我不能轉換的NSString像@「23:00」到NSDate的,然後我需要比較... :(

感謝意見;)

+0

這是NSDateFormatter的用途。或者你可以使用NSCalendar。當然,對於你的「第二天」邏輯,你需要實際做一些編程。 – 2012-03-18 19:35:20

+0

看起來很對我。你的時區是什麼? – 2012-03-18 19:47:35

+0

[將NSString的日期轉換爲NSDate]的可能的副本(http://stackoverflow.com/questions/4332319/convert-nsstring-of-a-date-to-an-nsdate) – 2012-03-18 19:50:43

回答

2

您可以轉換的字符串輸入HH:mmNSDate。如果endDate更小startDate,然後添加一天。

NSString *dateString = @"23:00"; 
NSString *startString = @"21:00"; 
NSString *endString = @"10:00"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.dateFormat = @"HH:mm"; 

NSDate *date = [formatter dateFromString:dateString]; 
NSDate *startDate = [formatter dateFromString:startString]; 
NSDate *endDate = [formatter dateFromString:endString]; 
if ([endDate compare:startDate] == NSOrderedAscending) { 
    endDate = [endDate dateByAddingTimeInterval:24*3600]; 
} 

if ([startDate compare:date] == NSOrderedAscending && [date compare:endDate] == NSOrderedAscending) { 
    NSLog(@"Date %@ is in the interval [%@, %@]", dateString, startString, endString); 
} else { 
    NSLog(@"Date %@ is not in the interval [%@, %@]", dateString, startString, endString); 
} 

PS。我假設在這裏使用ARC。

+0

我曾經想過,但你的例子有助於我認識到它;)非常感謝 – Injectios 2012-03-18 19:52:57

+0

yeap,這是正確的,但我添加了[timeFormatter setTimeZone:[NSTimeZone timeZoneWithName:@「UTC」]]; 從格式化程序獲取適當的NSDate – Injectios 2012-03-18 19:58:42