2015-05-18 46 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

相关问题