2015-12-15 32 views
0

我需要确定时间戳是否属于我建立的一组时间范围。我正在使用以下代码:如何根据当地时区获取NSDate的小时组件?

- (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

'NSCalendar'使用本地时区,除非你另有告知。其中一项:您的日期,设备的设置或“timesOfDay”中的值都是错误的。 –

回答

-1

你是这样想的吗?它并不完全是你想要的,但可以帮助你。这种方法使得在相同的值UTC时间为当地时间

+(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; 
} 
+0

但我正在处理现有日期数组,而不是试图获取当前日期的小时。 – helloB

+0

我不明白你的问题,它应该检查你当前的日历设置?或者您是否知道您查看的其他日期的时区? –

1

您发布的代码做的正是你的描述:它需要一个NSDate,因为它的时间戳参数,然后计算在当前这一日期的小时数时区。您应该记录该值以确认您获得了您的期望。

然后,您将您的小时值与存储到数组timesOfDay中的值进行比较。我的猜测是你的小时范围是错误的(也许那些不是在当前时区中表达的?)