为了得到小时和分钟组件,你这样做:
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