2015-05-18 43 views
-1

我試圖檢查一個NSDate的時間是否已經通過。我用了以下,但顯然有一年,所以它已經過去了。我將如何檢查的NSDate對象的只是時間,只有小時和分鐘是很重要的:檢查NSDate對象的時間是否已經通過

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"HH:mm:ss"]; 
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
NSDate *date = [dateFormat dateFromString:openingDay.endTime]; 

if ([date timeIntervalSinceNow] < 0.0) { 

} 

但日期:

2000-01-01 5:30:00 p.m. +0000 

的時間字符串的格式爲「HH:MM:SS '

我試圖尋找答案,因爲我認爲這將是常見的,但沒有運氣。

編輯:

我應該已經制定了一些,我得到一個時間,從它是一個字符串的服務器。我想再檢查一下這個時間是否過去。字符串是商店開放時間的結束時間,因此我想檢查商店是否關閉。

EDIT2:

我從JSON對象獲得字符串END_TIME:17:30:00。然後我想檢查當前時間是否在此時間之後,如果是,則顯示一個關閉的UIAlertView。我的方法是取這個字符串並將其轉換爲日期對象並將其與當前時間進行比較。但是,當我將它轉換爲NSDate對象時,年份是2000年,顯然是過去的一年。我希望我已經提供了足夠的。

+0

只需將字符串解析爲其組件即可獲得小時和分鐘。不需要日期格式化程序。 – rmaddy

回答

2

爲了得到小時和分鐘組件,你這樣做:

NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date]; 
NSInteger hour = [components hour]; 
NSInteger minute = [components minute]; 

然後,您可以創建的helper方法,以保持組織代碼:

- (NSInteger)hourFromDate:(NSDate *)date { 
    return [[NSCalendar currentCalendar] component:(NSCalendarUnitHour) fromDate:date]; 
} 

- (NSInteger)minuteFromDate:(NSDate *)date { 
    return [[NSCalendar currentCalendar] component:(NSCalendarUnitMinute) fromDate:date]; 
} 

注意component:fromDate:收益直接將構成要素(作爲NSInteger),因爲它只能爲每個參數使用一種組件類型,而components:fromDate:返回NSDateComponents,然後您可以抓取多個組件。

,然後只是:

NSDate *endDate = [dateFormat dateFromString:openingDay.endTime]; 
NSDate *today = [NSDate date]; 

NSInteger endDateHour = [self hourFromDate:endDate]; 
NSInteger endDateMinute = [self minuteFromDate:endDate]; 

NSInteger todayHour = [self hourFromDate:date]; 
NSInteger todayMinute = [self minuteFromDate:date]; 

BOOL hasEndMinutePassed = endDateMinute > todayMinute; 
BOOL hasEndHourPassed = endDateHour > todayHour; 

if ((hasEndHourPassed) || (endDateHour == todayHour && hasEndMinutePassed)) { 
    //Yep, it passed 
} else { 
    //Nope, it didn't 
} 

我這樣寫是爲了保持組織的事情。 你也可以寫一個類:

頭文件

@interface NSDate (Components) 

- (NSInteger)hour; 
- (NSInteger)minutes; 

@end 

實現文件:

#import "NSDate+Components.h" 

@implementation NSDate (Components) 

- (NSInteger)hour { 
    return [[NSCalendar currentCalendar] component:NSCalendarUnitHour fromDate:self]; 
} 

- (NSInteger)minute { 
    return [[NSCalendar currentCalendar] component:NSCalendarUnitMinute fromDate:self]; 
} 

你可以走得更遠一點比並添加類別本身內部的比較 - 邏輯:

將此添加到標題:

- (BOOL)hourAndMinutesPassedFromDate:(NSDate *)date; 

,然後執行:

- (BOOL)hourAndMinutesPassedFromDate:(NSDate *)date { 
    BOOL hasEndMinutePassed = [self minute] > [date minute]; 
    BOOL hasEndHourPassed = [self hour] > [date hour]; 

    return ((hasEndHourPassed) || ([self hour] == [date hour] && hasEndMinutePassed)); 
} 

完蛋了。我沒有測試邏輯本身(但它應該是準確的,我以前使用過類似的東西),當然你可以自由地修改它以適應你的需求。

+0

謝謝我會在早上檢查這個,當我在電腦:) – DevC

相關問題