NSDate 代表时间上的单个实例,与时区、日历等无关。
您需要做的就是将一个日期与其他两个日期进行比较,看看它是否位于它们之间。
听起来您的问题实际上是要比较实际的日期,这并不难。这只是我的头顶样本。
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
calendar.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
components.year = 2011;
...
components.hour = 8;
NSDate *opening = [calendar dateFromComponents:components];
components.day = components.day + 1;
components.hour = 0;
NSDate *closing = [calendar dateFromComponents:components];
NSDate *now = [NSDate date];
if ([opening compare:now] == NSOrderedAscending && [now compare:closing] == NSOrderedAscending) {
// do stuff
}
或者,如果将当前时间转换为目标时区的日期部分并检查小时部分,可能会更容易。这样您就不需要处理确保日期组件中的值没有超出范围的问题。另外,在一般情况下计算开始和结束日期组件并不简单。
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
calendar.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
NSDate *now = [NSDate date];
NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:now];
if (components.hour > 0 && components.hour < 8) {
// do stuff
}