如何根据当地时区获取NSDate的小时组件?

时间:2015-12-15 19:31:04

标签: ios objective-c

我需要确定时间戳是否属于我建立的一组时间范围。我正在使用以下代码:

- (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时区的小时而不是我当地的时区。我看到如何调整整个日期以根据当地时区打印出来,但是如何根据当地时区抓住小时?

2 个答案:

答案 0 :(得分:1)

您发布的代码正是您所描述的:它采用NSDate作为时间戳参数,然后计算当前时区中该日期的小时数。您应该记录该值以确认您获得了预期的结果。

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

答案 1 :(得分:-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;
}