我需要确定时间戳是否属于我建立的一组时间范围。我正在使用以下代码:
- (BOOL) timeStampInTimeRange: (NSDate *)timestamp {
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSCalendarUnitHour fromDate:timestamp];
NSInteger hour = [components hour];
for(int i = 0; i < [timesOfDay count]; i++){
NSArray *range = timesOfDay[i];
if( (hour >= [range[0] intValue]) && (hour < [range[1] intValue]) ){
return TRUE;
}
}
return FALSE;
}
然而,这实际上是检查GMT时区的小时而不是我当地的时区。我看到如何调整整个日期以根据当地时区打印出来,但是如何根据当地时区抓住小时?
答案 0 :(得分:1)
您发布的代码正是您所描述的:它采用NSDate作为时间戳参数,然后计算当前时区中该日期的小时数。您应该记录该值以确认您获得了预期的结果。
然后,将您的小时值与存储在数组timesOfDay中的值进行比较。我的猜测是你的小时范围错了(也许那些在当前时区没有表达?)
答案 1 :(得分:-1)
+(NSDate *) dateAsCurrentTime
{
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:NSHourCalendarUnit|NSMinuteCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:[NSDate date]];
NSCalendar *calNew = [NSCalendar currentCalendar];
calNew.timeZone=[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSDate *utcDate = [calNew dateFromComponents:components];
return utcDate;
}