爲了得到小時和分鐘組件,你這樣做:
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));
}
完蛋了。我沒有測試邏輯本身(但它應該是準確的,我以前使用過類似的東西),當然你可以自由地修改它以適應你的需求。
只需將字符串解析爲其組件即可獲得小時和分鐘。不需要日期格式化程序。 – rmaddy